I almost always single quote sed commands because it makes it obvious to me when I'm reading it that the shell won't do anything with it, but to effectively write shell scripts, you must learn how single quotes, double quotes, and backslash escapes are processed and know when they are required.
Note that the command:
(which seems to do what you want), and the command Aia suggested:
are not equivalent. Aia's suggestion has several unneeded escapes and is missing some that are crucial.
For this substitute command, the only characters that are special to the shell in this context (so they need to be quoted or escaped) are the backslash and the dollar sign. So, the following three commands are all equivalent to the command you want with minimal single quotes, minimal double quotes, and minimal backslash escapes:
Some versions of sed do what you want with or without the backslash in the 1st two commands above and with only one backslash in the 3rd command (including the sed on MAC OS X), but any sed that does what you want without those backslashes does not conform to the standards.
Last edited by Don Cragun; 10-18-2014 at 05:23 PM..
Reason: Fix typo (need double backslash in double quotes).
This User Gave Thanks to Don Cragun For This Post:
I am afraid you read too much on my example. It was only intended as a visual representation that quotes were not really necessary. Completely, unrelated.
Now, it is good if you felt you could use it to further show differences.
I am afraid you read too much on my example. It was only intended as a visual representation that quotes were not really necessary. Completely, unrelated.
Now, it is good if you felt you could use it to further show differences.
Seeing the difference is easy. Compare the 1st three lines of output (showing the operands that I said would produce equivalent sed behavior) with the last line (showing the operand that you suggested) from the command:
which produces the output:
Do you see the missing backslash?
You don't need to escape the slashes (/) or the braces ({ and }) because slash doesn't have any special meaning to the shell and the braces are keywords (not tokens) in the shell. If the braces had been surrounded by whitespace characters, they would have needed to be escaped or quoted as well.
I am learning SED and just following the shell scripting book, i have trouble understanding the grep and sed statement,
Question : 1
__________
/opt/oracle/work/antony>cat teledir.txt
jai sharma 25853670
chanchal singhvi 9831545629
anil aggarwal 9830263298
shyam saksena 23217847
lalit... (7 Replies)
Hi,
I am running a script sample.sh in bash environment .In the script i am using sed and awk commands which when executed individually from terminal they are getting executed normally but when i give these sed and awk commands in the script it is giving the below errors :-
./sample.sh: line... (12 Replies)
My need is :
Want to change
docBase="/something/something/something"
to
docBase="/only/this/path/for/all/files"
I have some (about 250 files)xml files.
In FileOne it contains
<Context path="/PPP" displayName="PPP" docBase="/home/me/documents" reloadable="true" crossContext="true">... (1 Reply)
I'm not sure if the problem I'm seeing is an artifact of sed or simply a beginner's mistake. Here's the problem: I want to add a zero-width space following each underscore between XML tags. For example, if I had the following xml:
<MY_BIG_TAG>This_is_a_test</MY_BIG_TAG>
It should look like... (8 Replies)
Hi all,
First off, Thank you all for the knowledge I have gleaned from this site!
Deleting Records from a text file... sed paragraphs
The following code works nearly perfect, however each time it is run on the log file it adds a newline at the head of the file, run it 5 times, it'll have 5... (1 Reply)
i made a script to update a lot of xml files. to save me some time. Ran it and it replaced all the the files with a 0kb file. The problem i was having is that I am using sed to change xml node <doc_root>. The problem with this is it has a / in the closing xml tag and the stuff inside will also have... (4 Replies)
Hello and thx for reading this
I'm using sed to remove only the leading spaces in a file
bash-280R# cat foofile
some text
some text
some text
some text
some text
bash-280R#
bash-280R# sed 's/^ *//' foofile > foofile.use
bash-280R# cat foofile.use
some text
some text
some text... (6 Replies)
Write a sed script to extract the year, rank, and stock for the most recent 10 years available in the file top10_mktval.csv, and output in the following format:
------------------------------
YEAR |RANK| STOCK
------------------------------
2007 | 1 | Exxon... (1 Reply)