Search and print matched lines:
scnzzh@ZUBT1:~/zzh$ sed -n '/ExecStart/p' docker.service ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
Search and replace pattern:
scnzzh@ZUBT:~$ echo 'app[01:100].com' | sed 's/.*\[/\[/' [01:100].com
Search and replace in file:
scnzzh@ZUBT1:~/zzh$ grep '\-H fd://' test.service ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock scnzzh@ZUBT1:~/zzh$ sed -i 's/-H fd:\/\//-H fd:\/\/ -H tcp:\/\/10.0.2.5:2375/' test.service scnzzh@ZUBT1:~/zzh$ grep '\-H fd://' test.service ExecStart=/usr/bin/dockerd -H fd:// -H tcp://10.0.2.5:2375 --containerd=/run/containerd/containerd.sock
Multiple search and delete following 2 lines in file:
sed -i -e '/\(zabbix_wrapper.pl\|type="thread"\|type="collect"\)/,+2d' $line
'<' and '>' don't need to be escaped:
sed -i 's/<depend>PARALLEL_THREAD<\/depend>/<depend>NONE<\/depend>/g' $line
Change position:
cat test1 first:second one:two sed 's/\(.*\):\(.*\)/\2:\1/' test1 second:first two:one
Use semicolon to execute multiple commands:
cnzzh@zubt1:~/zzh$ seq 6 1 2 3 4 5 6 scnzzh@zubt1:~/zzh$ seq 6 | sed '1d;3d;5d' 2 4 6
Replace multiple blank lines with one:
scnzzh@zubt1:~/zzh$ cat a.txt 1 2 3 4 5 scnzzh@zubt1:~/zzh$ sed '/^$/N;/^\n$/D' a.txt 1 2 3 4 5
$ Match the last line.
d Delete pattern space. Start next cycle.
D If pattern space contains no newline, start a normal new cycle as if the d command was issued. Otherwise, delete text in the pattern space up to the first newline, and restart cycle with the resultant pattern space, without reading a new line of input.
n N Read/append the next line of input into the pattern space.
Remove all blank lines:
scnzzh@zubt1:~/zzh$ sed '/^$/d' a.txt 1 2 3 4 5
Remove lines those only contain whitespaces:
scnzzh@zubt1:~/zzh$ cat a.txt aaa bbb ccc scnzzh@zubt1:~/zzh$ sed -r '/^\s*$/d' a.txt aaa bbb ccc
Replace multiple whitespace lines to one line:
scnzzh@zubt1:~/zzh$ sed '/^\s*$/N;/^\s*$/D' a.txt aaa bbb ccc
Replace values of parameters/variables:
/home/scnzzh/zzh $> cat b.txt binpath=/PATH/TO/SCRIPTS/ aa_binpath=/PATH/TO/AA/ /home/scnzzh/zzh $> sed "s/binpath=\(.*\)/binpath=aaa/" b.txt binpath=aaa aa_binpath=aaa /home/scnzzh/zzh $> sed "s/^binpath=\(.*\)/binpath=aaa/" b.txt binpath=aaa aa_binpath=/PATH/TO/AA/