目录

字符串

分隔符号可以自由更换

$ echo "Hi, John." | sed 's/Hi/HI/g'
HI, John.
$ echo "Hi, John." | sed 's#Hi#HI#g'
HI, John.
$ echo "Hi, John." | sed 's-Hi-HI-g'
HI, John.

单引号’

$ echo "'s', 'm', 'l', 'x'" | sed 's/'"'"'s'"'"', '"'"'m'"'"', '"'"'l'"'"', '"'"'x'"'"'/'"'"'s'"'"', '"'"'l'"'"'/g'
's', 'l'

使用转义符\ ([])

$ echo "['hello', 'world']" | sed 's/\[/</g'
<'hello', 'world']

文件

读取文件的内容,替换后输出。

$ cat /etc/system-release
CentOS Linux release 8.1.1911 (Core) 

$ sed 's, release .*$,,g' /etc/system-release
CentOS Linux

这个示例来源于 CentOS8 的配置文件 /etc/default/grub

编辑或更新文件内容 (-i)

sed -i 's/\['"'"'s'"'"', '"'"'m'"'"', '"'"'l'"'"', '"'"'x'"'"'\]/\['"'"'s'"'"', '"'"'l'"'"'\]/g' yolov5/weights/download_weights.sh

多个文件 (-exec {}) ^指定行的开始位置

find labels/ -name '*.txt' -exec sed -i 's/^1 /0 /g' {} +

同时匹配 (OR |)

find labels/ -name '*.txt' -exec sed -i -E 's/^1|2 /0 /g' {} +

匹配到行尾 (.*)

sed -i 's/nc: .*/nc: 2/g' yolov5?.yaml

匹配数字 ([0-9]*)

sed -i 's/nc: [0-9]*/nc: 2/g' yolov5?.yaml

参考资料