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]