NJMR
NJMR

Reputation: 1926

sed command in UNIX - Unable to understand

I am new to UNIX and was going through a script file and came accross a snippet. I tried to analyze the snippet. I read a bit about the 'sed - stream editor' command also the sed -e option. I also executed the snippet and was ablt to get see the output. But I am unable to understand whats going on. Below is the snippet.

ID=101
echo ABCDEFGHIJK KLMJN | \
sed -e "1,\$s/ *$/^\"`echo $ID`\"/" \
>a.txt

Output is ABCDEFGHIJK KLMJN^"101"

There are lots of places in the script file where they have used sed command. Can someone help me how to decode these kind of snippets?

Upvotes: 0

Views: 190

Answers (1)

Moritz Sauter
Moritz Sauter

Reputation: 167

You should look at it part by part:

sed -e "1,\$s/ *$/^\"`echo $ID`\"/"
       |    |    |               |
         1    2          3
  1. You want to only work on specific lines. For that example start with the first line and end with the last. In this case it isn't needed to write that in this way. So

    sed -e "s/ *$/^\"$(echo $ID)\"/"
    

    does exactly the same.

  2. Here comes the replace command. In this case you replace zero or more spaces between the last non-space and the line ending. If you want to find out more about this I suggest googling for regex.

  3. The backtick (``) is actually a 'shellism'. It causes the shell to execute the command before replacing. For a more readable way you should use $(echo $ID). After that you replace the regex from 2. with the result of this, which will be ^"101".

And after that the result is ABCDEFGHIJK KLMJN^"101"

Upvotes: 3

Related Questions