UFSの備忘録 % Home / Categories

sed备忘录

Created 2022-05-07 / Updated 2022-12-01

基本正则表达式:

^:行首。如:^abc

$:行尾。如:abc$

.:除换行符外的任意单个字符

[]:包含在[]中的任意一个字符

[^]:不在[^]中的任意一个字符。如:[^abc]

[-]:指定范围内的任意一个字符。如:[0-9]

*:匹配前面一个字符0次或多次

\{n\}:前面字符连续出现n次。如:w\{3\}匹配www

\{n,\}:前面字符连续出现n次以上。如:w\{3,\}匹配wwww

\{n,m\}:前面字符连续出现n次以上,m次以下。如:w\{1,3\}匹配www

\(a\|b\):a或b

搜索替换:

sed 's/原内容/替换的内容/'

末尾加上g可替换每行全部匹配的内容,否则只替换每行第一个匹配的内容:

sed 's/原内容/替换的内容/g'

(2g, 3g, Ng… 表示从第2个,第3个,第N个匹配到的内容开始替换)

替换某行

sed '2c bbb'

(把第二行的内容替换为bbb

只对某行搜索替换:

sed '3s/aaa/bbb/'

(将第三行的aaa替换为bbb

当需要引用shell变量时,需把单引号改成双引号:

sed "s/${shell变量}/替换的内容/g"

提取子字符串:

字符串:aaaonebbbtwoccc

sed 's/aaa\(.*\)bbb\(.*\)ccc/\1\2/g'

(上面的命令将提取字符串中的onetwo。分别用\1\2来引用第1和第2个括号匹配到的内容)

添加到行首:

sed 's/^/内容&/'

添加到行尾:

sed 's/$/&内容/'

同时执行两个替换规则:

sed 's/^/内容&/; s/$/&内容/'

删除首行:

sed '1d'

删除1到3行:

sed '1,3d'

删除尾行:

sed '$d'

打印某行:

sed -n '5p'

删除匹配行:

sed '/xxx/d'

有时会遇到行尾一些字符无法匹配,这时可以加上\r试试。如删除行尾的/

sed 's/\/\r$//'
Categories: [textproc]