From SED: insert text after the last line? - Unix & Linux Stack Exchange, I learnt that $
if used outside the substitution in sed represents the end of file. This I have tried to use in the follwing to replace all occurences of abc
occuring after # Start
and till end of the file by 123
Code:
file=Data.txt
Initial="# Start";
Final='\$'
orig="abc";
new="123";
sed -i -r -e "\!${Initial}!,\!${Final}!{s!${orig}!${new}!g}" ${file} ;
Data.txt
# Start
abc
abc
$
abc
abc
Output:
# Start
123
123
$
abc
abc
Expected Output:
# Start
123
123
$
123
123
What am I missing? i.e. How to tell to sed that $
means end of the file?
Note: I am escaping $
, as I am using double quotes in the sed expression (for safer variable expansion). I hope this is correct. Can you comment on this?
sed
to substitute in a range that starts with a line that matches# Start
and ends with a line that matches$
and that's exactly what it does... – don_crissti Dec 11 '18 at 21:52$
means end of the file? (as in the referred link). SED: insert text after the last line? - Unix & Linux Stack Exchange – Porcupine Dec 11 '18 at 21:53$
if used outside the substitution in sed represents the end of file" ... Well, not quite, apparently... What's stopping you from using$
? And btw, of all delimiters that could be used,!
is probably the worst choice... – don_crissti Dec 11 '18 at 22:00$
in above example to mean end of file? Also if possible, please give a suitable delimiter that you think is usually good in most of the cases. I used!
as it is rarely used symbol. – Porcupine Dec 11 '18 at 22:01$
as an address. Ignore the accepted answer there which needlessly complicates things by double quoting and escaping the$
. – don_crissti Dec 11 '18 at 22:04$
as I am using double quotes in the sed expression (for safer variable expansion). So, I used the exact thing here. Isn't it? Could you please find the flaw with my example? – Porcupine Dec 11 '18 at 22:09$
in the RHS of that assignment. As to your problem, I recommend reading the manual if you really want to learn something... You'll find out that$
is a special address that designates the last line but not if you use it as a pattern... – don_crissti Dec 11 '18 at 22:14