linux上sed的常用操作
注意事项
分割符不一定是"/"可以是任意的符号,如@
"^“代表行首,”
"
代表行尾
s
e
d
里面需要用变量,要用双引号
s
e
d
′
s
/
/
/
g
′
代表匹配每一行有行首到行尾的所有字符
s
e
d
′
s
/
/
/
′
代表匹配每一行的行首开始匹配,匹配到第一个符合的字段,就会结束,跳到下一行
s
e
d
命令使用双引号的情况下,可以使用
"代表行尾 sed里面需要用变量,要用双引号 sed 's///g' 代表匹配每一行有行首到行尾的所有字符 sed 's///' 代表匹配每一行的行首开始匹配,匹配到第一个符合的字段,就会结束,跳到下一行 sed命令使用双引号的情况下,可以使用
"代表行尾sed里面需要用变量,要用双引号sed′s///g′代表匹配每一行有行首到行尾的所有字符sed′s///′代表匹配每一行的行首开始匹配,匹配到第一个符合的字段,就会结束,跳到下一行sed命令使用双引号的情况下,可以使用var(变量)直接引用,单引号的情况下,可以使用’“
v
a
r
"
′
引用
e
c
h
o
∣
s
e
d
"
s
/
/
var"'引用 echo | sed "s/^/
var"′引用echo∣sed"s//RANDOM.rmvb_/g”
echo | sed “s/^/'“
R
A
N
D
O
M
"
′
.
r
m
v
b
/
g
"
s
e
d
命令中使用双引号的情况下,直接
‘
s
h
e
l
l
c
o
m
m
a
n
d
‘
或者
RANDOM"'.rmvb_/g " sed命令中使用双引号的情况下,直接`shell command`或者
RANDOM"′.rmvb/g"sed命令中使用双引号的情况下,直接‘shellcommand‘或者(shell command)引用命令执行。
echo | sed “s/^/$(date +”%Y%m%d”).rmvb_/g”
echo | sed “s/^/echo $RANDOM
.rmvb_/g”
添加
# 所有行末尾加*号
sed -i 's/$/*/g' rpm-faile.txt
# 包含autostart的行首添加#号
sed -i "/autostart/ s/^/#/" /var/spool/cron/crontabs/root
# 给空行开头添加字符null
sed -i '/^$/s/^/null/' domain.txt
# 匹配字符串行后添加内容
sed -i "/AAAA/a\BBBB " filename
# 匹配字符串行前添加内容
sed -i "/AAAA/i\BBBB " filename
# 行首添加指定字符串:A& 表示添加到行首
sed -i "s/^/AAAA&/ " filename
# 行尾添加指定字符串:&A 表示添加到行尾
sed -i "s/$/&AAAA/ " filename
# 匹配字符串开头行前添加内容
sed -i "s/^pattern/AAAA&/g" filename
# 匹配字符串后面添加内容
sed -i 's/pattern/&AAAA/' filename
删除
# 删除包含autostart字符串的行首#号
sed -i "/autostart/ s/^#//" /var/spool/cron/crontabs/root
# 删除不包含AAAA的行
sed -i '/AAAA/!d' filename
# 删除空行
sed -i '/^$/d' filename
# 删除行首空格
sed -i 's/^[ \t]*//g' filename
# 删除行末空格
sed -i 's/[ \t]*$//g' filename
# 删除所有的空格
sed -i 's/[[:space:]]//g' filename
# 删除包含匹配字符串的行
sed -i '/AAAA/d' filename
# 删除匹配字符串AAAA开头的行
sed -i '/^AAAA.*/d' filename
# 删除特殊字符串之间的内容,\/代表转义/
sed -i '/<\/schema>/,/<heartbeat>/{//!d}' filename
# 删除某行到指定字符串之间的内容
sed -i '3,/AAAA/d' filename
# 删除匹配AAAA,EEEE之间的数据
sed -i '/AAAA/,/EEEE/d' filename
# 删除匹配AAAA,EEEE之间的数据,保留AAAA
sed -i '/AAAA/,/EEEE/{/AAAA/b;d}' filename
# 删除匹配AAAA,EEEE之间的数据,保留EEEE
sed -i '/AAAA/,/EEEE/{/EEEE/b;d}' filename
# 删除匹配AAAA,EEEE之间的数据,保留AAAA和EEEE
sed -i '/AAAA/,/EEEE/{/AAAA/b;/EEEE/b;d}' filename
# 直接替换原文件(有风险)
sed -i '/匹配字符串/I, +N行 d' 输入文件名
# 不替换原文件(安全适合老年人)
sed '/匹配字符串/I, +N行 d' 输入文件名 > 输出文件名
批量操作
# 删除203至218行内容
find . -name "*.html" -type f | xargs sed -i -e '203,218d'
# 删除指定字符串的行
find . -name "*.html" -type f | xargs sed -i -e '/AAAA/d;/BBBB/d'
# 删除指定字符串之间的内容
find . -name "*.html" -type f | xargs sed -i -e '/AAAA/,/BBBB/d'
替换
# 删除包含RemoveIPC字符的行行首的#号并把yes替换为no
sed -i "/RemoveIPC/ s/^#//; /RemoveIPC/ s/yes/no/g" /etc/systemd/logind.conf
# 替换匹配字符串
sed -i “s/被替换内容/替换内容/g” filename
# 匹配指定字符串开头的行,替换整行内容
sed -i "/^指定字符/替换内容" filename
# 匹配到行中部分内容,替换整行
sed -i '/.*AAAA.*/c'$coud'' filename
# 匹配到行中以AAAA开头的内容,替换整行
sed -i '/AAAA$/c\BBBB' filename
# 匹配到行中以AAAA结尾的内容,替换整行
sed -i '/AAAA$/c\BBBB' filename
# 匹配指定行到某行之间的替换
sed -i '3,8c\AAAA' filename
# 匹配指定字符串之间的内容替换
sed -i '/AAAA/,/BBBB/c\CCCC' filename
# 所有以AAAA开头的被替换为AAAABBBB
sed 's/^AAAA/&BBBB/' filename
# 分隔符不是唯一,此处以@作为分隔符
sed -i "s@wav/dev/third_party/B00000@wav@ " filename
# 首字母转换为大写
sed 's/^[a-z]\+/\u&/' filename
# 首字母转换为小写
sed 's/^[A-Z]\+/\l&/' filename
# 匹配到的字符全部转换为大写:
sed 's/^[a-z]\+/\U&/' filename
# 匹配到的字符全部转换为小写:
sed 's/^[A-Z]\+/\L&/' filename
查看
# 查询指定字符串所在行号
sed -n "/AAAA/=" filename
# 显示第一行
sed -n '1p' ab
# 显示最后一行
sed -n '$p' ab
# 显示第一行到第二行
sed -n '1,2p' ab
# 显示第二行到最后一行
sed -n '2,$p' ab