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
How it works (Step-by-Step)
To understand this, you have to know that sed processes text line-by-line in a "pattern space" (a temporary buffer).
The command consists of two parts separated by a semicolon:
1. /^$/N
-
/^$/: This is a pattern match for an empty line (start of line^immediately followed by end of line$). -
N: If the pattern matches (i.e., we are on an empty line), theNcommand tellssedto read the next line and append it to the current pattern space, separated by a newline character (\n). -
Result: You now have two lines in your buffer.
2. /^\n$/D
-
/^\n$/: This checks if the two lines you just joined are both empty. Insedsyntax, an empty line followed by another empty line in the buffer looks like\n. -
D: This is the "Delete" command, but with a twist. If the pattern matches (meaning we found two consecutive empty lines),Ddeletes the first part of the pattern space (up to the newline) and restarts the cycle with the remaining pattern space. -
Result: It keeps "eating" empty lines one by one until it encounters a line that actually contains text.
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/

浙公网安备 33010602011771号