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'
(上面的命令将提取字符串中的one
和two
。分别用\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]