* can't invoke sed properly... @ Ned ` Laura Eaves ` Lorenzo Taylor 0 siblings, 2 replies; 8+ messages in thread From: Ned @ UTC (permalink / raw) To: Speakup is a screen review system for Linux. Hi all, I have problemof invoking the sed text editor properly. How, let's say, would I invoke sed in order to make a substitution in all lines of my_file: sed :1,$ s/red/blue/g my_file I am writing a bash script and need to test each line outside it first to make sure it works. Many thanks in advance! Ned ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: can't invoke sed properly... can't invoke sed properly Ned @ ` Laura Eaves ` Lorenzo Taylor 1 sibling, 0 replies; 8+ messages in thread From: Laura Eaves @ UTC (permalink / raw) To: Speakup is a screen review system for Linux. Hi Ned -- Well you should probably use sed -e pattern filename >outfile But beware of sed. I once was chasing down an obscure bug in a very large script and between me and another person we found that a call to sed was implicitly truncating a long line to a built in maximum. The resulting behavior of the script was quite confusing to say the least. Sed will give no error message about this, and for must apps you won't run into it, but be aware that sed will truncate lines it can't load into its buffer. Now as for your pattern, I believe you can delete the 1,$ as sed should cycle through the lines as it is and pass the updated liine to output. So your line should be: sed -e 's/red/blue/g' filename >outfile HTH --le ----- Original Message ----- From: "Ned" <ngranic@cox.net> To: "Speakup is a screen review system for Linux." <speakup@braille.uwo.ca> Sent: Monday, May 02, 2005 4:23 PM Subject: can't invoke sed properly... Hi all, I have problemof invoking the sed text editor properly. How, let's say, would I invoke sed in order to make a substitution in all lines of my_file: sed :1,$ s/red/blue/g my_file I am writing a bash script and need to test each line outside it first to make sure it works. Many thanks in advance! Ned _______________________________________________ Speakup mailing list Speakup@braille.uwo.ca http://speech.braille.uwo.ca/mailman/listinfo/speakup ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: can't invoke sed properly... can't invoke sed properly Ned ` Laura Eaves @ ` Lorenzo Taylor ` Laura Eaves 1 sibling, 1 reply; 8+ messages in thread From: Lorenzo Taylor @ UTC (permalink / raw) To: Speakup is a screen review system for Linux. -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Someone tell me if there is an easier way, but this worked for me: cat my-file | sed "s/red/blue/g" > my-file This line replaced red with blue every time it appeared in the file. I am using GNU sed version 4.1.4 here. Your mileage may vary. Lorenzo - -- "We decided that we should evaluate the Microsoft offerings first. Once we realised what a powerful set of tools they were, it became self-evident this was the right way to go down." Microsoft: the right way to go down -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.0 (GNU/Linux) iD8DBQFCdpKPG9IpekrhBfIRAg8oAJ0WeiXYLHbneHy2fzhSDq79r/23YACglvjU j3rSTXu9XzKF+eUximAMCB0= =sm17 -----END PGP SIGNATURE----- ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: can't invoke sed properly... ` Lorenzo Taylor @ ` Laura Eaves ` Lorenzo Taylor ` Charles Hallenbeck 0 siblings, 2 replies; 8+ messages in thread From: Laura Eaves @ UTC (permalink / raw) To: Speakup is a screen review system for Linux. Be careful putting the output into the same file as the input. Note that I/O redirection takes place before the programs start running, so cat will open myfile and the shell will redirect the output to the input of sed, and before sed or cat ever start running, the shell will clobber the output file if it exists to make way for the output of sed. Just use different names and later move the file back to the original if you want it updated. Oh and you don't use the -e option -- I don't remember what version of sed I was using when I ran that. But the -e option is useful if you have several patterns to apply to each input line. sed will read the -e options left to right and treat each pattern as being on one line. Of course you could always just use a quoted pattern that ran over multiple lines, but it is cleaner to use -e. Finally, be careful using sed or any other pattern matching command, that you use single quotes instead of double quotes on the command line, as using double quotes will result in some undesired translation. For example: sed "1,$d" will actually translate to sed "1,xyz" where xyz is the value of the environment variable d. Lots of little gotchas in pattern matching. Have fun! --le ----- Original Message ----- From: "Lorenzo Taylor" <lorenzo@taylor.homelinux.net> To: "Speakup is a screen review system for Linux." <speakup@braille.uwo.ca> Sent: Monday, May 02, 2005 4:50 PM Subject: Re: can't invoke sed properly... -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Someone tell me if there is an easier way, but this worked for me: cat my-file | sed "s/red/blue/g" > my-file This line replaced red with blue every time it appeared in the file. I am using GNU sed version 4.1.4 here. Your mileage may vary. Lorenzo - -- "We decided that we should evaluate the Microsoft offerings first. Once we realised what a powerful set of tools they were, it became self-evident this was the right way to go down." Microsoft: the right way to go down -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.0 (GNU/Linux) iD8DBQFCdpKPG9IpekrhBfIRAg8oAJ0WeiXYLHbneHy2fzhSDq79r/23YACglvjU j3rSTXu9XzKF+eUximAMCB0= =sm17 -----END PGP SIGNATURE----- _______________________________________________ Speakup mailing list Speakup@braille.uwo.ca http://speech.braille.uwo.ca/mailman/listinfo/speakup ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: can't invoke sed properly... ` Laura Eaves @ ` Lorenzo Taylor ` Charles Hallenbeck 1 sibling, 0 replies; 8+ messages in thread From: Lorenzo Taylor @ UTC (permalink / raw) To: Speakup is a screen review system for Linux. -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Oh yeah. Didn't think about the single quote vs. double quote thing there. And the cat my-file |sed >my-file thing seems to have at best a 50% success rate. Some times it works, and some times it clobbers the file. Oh well. I didn't want to have to use a temporary file. But I guess there are many places where one just can't take shortcuts. <smile> Lorenzo - -- "We decided that we should evaluate the Microsoft offerings first. Once we realised what a powerful set of tools they were, it became self-evident this was the right way to go down." Microsoft: the right way to go down -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.0 (GNU/Linux) iD8DBQFCdqc0G9IpekrhBfIRAkTzAKCZaevSG8nlmJzwRGMu5geVQdC6/ACfdKJ0 ILLqD17L9ZZXfG2+ze5eyes= =cOFq -----END PGP SIGNATURE----- ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: can't invoke sed properly... ` Laura Eaves ` Lorenzo Taylor @ ` Charles Hallenbeck ` Laura Eaves 1 sibling, 1 reply; 8+ messages in thread From: Charles Hallenbeck @ UTC (permalink / raw) To: Speakup is a screen review system for Linux. Sed has an option to edit a file "in place" with an optional backup created if you need one. The option is -i and it has worked fine for me. Sed has also been able to edit files with lines that are 32K in length, although I used it as a filter in that application and did not try to "in place" option. On Mon, 2 May 2005, Laura Eaves wrote: > Be careful putting the output into the same file as the input. > Note that I/O redirection takes place before the programs start running, so > cat will open myfile and the shell will redirect the output to the input of > sed, and before sed or cat ever start running, the shell will clobber the > output file if it exists to make way for the output of sed. > Just use different names and later move the file back to the original if you > want it updated. > Oh and you don't use the -e option -- I don't remember what version of sed I > was using when I ran that. > But the -e option is useful if you have several patterns to apply to each > input line. sed will read the -e options left to right and treat each > pattern as being on one line. Of course you could always just use a quoted > pattern that ran over multiple lines, but it is cleaner to use -e. > > Finally, be careful using sed or any other pattern matching command, that > you use single quotes instead of double quotes on the command line, as using > double quotes will result in some undesired translation. For example: > > sed "1,$d" > > will actually translate to > > sed "1,xyz" > > where xyz is the value of the environment variable d. > Lots of little gotchas in pattern matching. > Have fun! > --le > > ----- Original Message ----- > From: "Lorenzo Taylor" <lorenzo@taylor.homelinux.net> > To: "Speakup is a screen review system for Linux." <speakup@braille.uwo.ca> > Sent: Monday, May 02, 2005 4:50 PM > Subject: Re: can't invoke sed properly... > > > -----BEGIN PGP SIGNED MESSAGE----- > Hash: SHA1 > > Someone tell me if there is an easier way, but this worked for me: > > cat my-file | sed "s/red/blue/g" > my-file > > This line replaced red with blue every time it appeared in the file. > > I am using GNU sed version 4.1.4 here. Your mileage may vary. > > Lorenzo > - -- > "We decided that we should evaluate the Microsoft offerings first. Once we > realised what a powerful set of tools they were, it became self-evident this > was > the right way to go down." > > Microsoft: the right way to go down > -----BEGIN PGP SIGNATURE----- > Version: GnuPG v1.4.0 (GNU/Linux) > > iD8DBQFCdpKPG9IpekrhBfIRAg8oAJ0WeiXYLHbneHy2fzhSDq79r/23YACglvjU > j3rSTXu9XzKF+eUximAMCB0= > =sm17 > -----END PGP SIGNATURE----- > > _______________________________________________ > Speakup mailing list > Speakup@braille.uwo.ca > http://speech.braille.uwo.ca/mailman/listinfo/speakup > > > _______________________________________________ > Speakup mailing list > Speakup@braille.uwo.ca > http://speech.braille.uwo.ca/mailman/listinfo/speakup > -- The Moon is Waning Crescent (31% of Full) "Things are in the saddle, and they ride mankind." Ralph Waldo Emerson Visit my download site at http://www.mhcable.com/~chuckh ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: can't invoke sed properly... ` Charles Hallenbeck @ ` Laura Eaves ` Charles Hallenbeck 0 siblings, 1 reply; 8+ messages in thread From: Laura Eaves @ UTC (permalink / raw) To: Speakup is a screen review system for Linux. This may be a newer implementation of sed. The one I ran while working on the said project (no pun intended) did indeed have a silent buffer limit and the bug was a real bear to find but easy to fix -- we just changed to awk, which is more flexible and powerful than sed. I hadn't heard of the -i option, but I don't deny it exists. But my question is this: don't you have to put the file on the command line when using -i rather than just redirecting with the shell > sign? So you'd presumably have sed -i pattern filename and sed would edit filename in place. Nice feature. But note that clobbering an input file by naming it also as the output file is a common mistake newbies make with many commands and it is a good idea to point it out so the user will beware. Cheers. --le ----- Original Message ----- From: "Charles Hallenbeck" <chuckh@hhs48.com> To: "Speakup is a screen review system for Linux." <speakup@braille.uwo.ca> Sent: Monday, May 02, 2005 6:48 PM Subject: Re: can't invoke sed properly... Sed has an option to edit a file "in place" with an optional backup created if you need one. The option is -i and it has worked fine for me. Sed has also been able to edit files with lines that are 32K in length, although I used it as a filter in that application and did not try to "in place" option. On Mon, 2 May 2005, Laura Eaves wrote: > Be careful putting the output into the same file as the input. > Note that I/O redirection takes place before the programs start running, > so > cat will open myfile and the shell will redirect the output to the input > of > sed, and before sed or cat ever start running, the shell will clobber the > output file if it exists to make way for the output of sed. > Just use different names and later move the file back to the original if > you > want it updated. > Oh and you don't use the -e option -- I don't remember what version of sed > I > was using when I ran that. > But the -e option is useful if you have several patterns to apply to each > input line. sed will read the -e options left to right and treat each > pattern as being on one line. Of course you could always just use a > quoted > pattern that ran over multiple lines, but it is cleaner to use -e. > > Finally, be careful using sed or any other pattern matching command, that > you use single quotes instead of double quotes on the command line, as > using > double quotes will result in some undesired translation. For example: > > sed "1,$d" > > will actually translate to > > sed "1,xyz" > > where xyz is the value of the environment variable d. > Lots of little gotchas in pattern matching. > Have fun! > --le > > ----- Original Message ----- > From: "Lorenzo Taylor" <lorenzo@taylor.homelinux.net> > To: "Speakup is a screen review system for Linux." > <speakup@braille.uwo.ca> > Sent: Monday, May 02, 2005 4:50 PM > Subject: Re: can't invoke sed properly... > > > -----BEGIN PGP SIGNED MESSAGE----- > Hash: SHA1 > > Someone tell me if there is an easier way, but this worked for me: > > cat my-file | sed "s/red/blue/g" > my-file > > This line replaced red with blue every time it appeared in the file. > > I am using GNU sed version 4.1.4 here. Your mileage may vary. > > Lorenzo > - -- > "We decided that we should evaluate the Microsoft offerings first. Once we > realised what a powerful set of tools they were, it became self-evident > this > was > the right way to go down." > > Microsoft: the right way to go down > -----BEGIN PGP SIGNATURE----- > Version: GnuPG v1.4.0 (GNU/Linux) > > iD8DBQFCdpKPG9IpekrhBfIRAg8oAJ0WeiXYLHbneHy2fzhSDq79r/23YACglvjU > j3rSTXu9XzKF+eUximAMCB0= > =sm17 > -----END PGP SIGNATURE----- > > _______________________________________________ > Speakup mailing list > Speakup@braille.uwo.ca > http://speech.braille.uwo.ca/mailman/listinfo/speakup > > > _______________________________________________ > Speakup mailing list > Speakup@braille.uwo.ca > http://speech.braille.uwo.ca/mailman/listinfo/speakup > -- The Moon is Waning Crescent (31% of Full) "Things are in the saddle, and they ride mankind." Ralph Waldo Emerson Visit my download site at http://www.mhcable.com/~chuckh _______________________________________________ Speakup mailing list Speakup@braille.uwo.ca http://speech.braille.uwo.ca/mailman/listinfo/speakup ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: can't invoke sed properly... ` Laura Eaves @ ` Charles Hallenbeck 0 siblings, 0 replies; 8+ messages in thread From: Charles Hallenbeck @ UTC (permalink / raw) To: Speakup is a screen review system for Linux. Yes, you must mention the filename on the command line instead of redirecting or piping it. My version is 4.1.2, and I am not sure how long this option has been available. You are right about the dangers of redirecting both input and output using the same file, but I guess if you know about the -i option you might not be tempted to do that. On Tue, 3 May 2005, Laura Eaves wrote: > This may be a newer implementation of sed. The one I ran while working on > the said project (no pun intended) did indeed have a silent buffer limit and > the bug was a real bear to find but easy to fix -- we just changed to awk, > which is more flexible and powerful than sed. > I hadn't heard of the -i option, but I don't deny it exists. > But my question is this: don't you have to put the file on the command line > when using -i rather than just redirecting with the shell > sign? > So you'd presumably have > sed -i pattern filename > and sed would edit filename in place. > Nice feature. > > But note that clobbering an input file by naming it also as the output file > is a common mistake newbies make with many commands and it is a good idea to > point it out so the user will beware. > > Cheers. > --le -- The Moon is Waning Crescent (25% of Full) "Things are in the saddle, and they ride mankind." Ralph Waldo Emerson Visit my download site at http://www.mhcable.com/~chuckh ^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~ UTC | newest]
Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
can't invoke sed properly Ned
` Laura Eaves
` Lorenzo Taylor
` Laura Eaves
` Lorenzo Taylor
` Charles Hallenbeck
` Laura Eaves
` Charles Hallenbeck
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).