==== replace text between two lines with a file ====
tags | line numbers, sed command to insert a file
Replace lines between \$start and \$end in main.txt with contents of part.txt
sed -e "$start e cat part.txt" -e "$start,$end d" main.txt
Sample command:
sed -e "1 e cat part.txt" -e "1,2 d" main.txt
$ cat main.txt
a b c
d e f
g h i
j k l
$ cat part.txt
x y z
p q r
s t u
$ start=1; end=2; sed -e "$start e cat part.txt" -e "$start,$end d" main.txt
x y z
p q r
s t u
g h i
j k l
$ start=2; end=4; sed -e "$start e cat part.txt" -e "$start,$end d" main.txt
a b c
x y z
p q r
s t u
$ start=2; end=3; sed -e "$start e cat part.txt" -e "$start,$end d" main.txt
a b c
x y z
p q r
s t u
j k l
$ start=2; end=2; sed -e "$start e cat part.txt" -e "$start,$end d" main.txt
a b c
x y z
p q r
s t u
g h i
j k l
==== insert file at the beginning of another file ====
This will insert part.txt at the beginning of main.txt.
sed -e "1 e cat part.txt" main.txt
Example:
$ cat main.txt
a b c
d e f
g h i
j k l
$ cat part.txt
x y z
p q r
s t u
$ sed -e "1 e cat part.txt" main.txt
x y z
p q r
s t u
a b c
d e f
g h i
j k l
Found it in: https://unix.stackexchange.com/questions/337435/sed-insert-file-at-top-of-another
==== backup with timestamp ====
tags | sed create backup, YYYYMMDD_HHMMSS
sed "-i_asof_`date +%Y%m%d_%H%M%S`" -e 's/foo/bar/g' main.txt
will backup to something like main.txt_asof_20210128_151656
sed "-i.`date +%F`" -e 's/foo/bar/g' main.txt
will backup to something like main.txt.2021-01-28
==== sed do not change line endings ====
sed -b
Ref:- https://stackoverflow.com/questions/4652652/preserve-line-endings
==== replace double quote with single quote ====
sed "s/\"/'/g"
Ref:- https://stackoverflow.com/questions/16154007/replace-all-double-quotes-with-single-quotes
Sample run:
% sed "s/\"/'/g"
a
a
"
'
'
'