sed命令使用小技巧


替换网址前缀,适用于批量修改nginx配置文件,()内的匹配为分组,可以使用\1,\2,\3来代替

1
sed 's/\(admin.*\)\.\([a-z]\{3\}\)\./a.\2./g' /etc/nginx/conf.d/admin.conf

– 例如: 替换adminfdsfdas.sdf.xxxxx.com为a.sdf.xxxxx.com –

获取11:11-12:12时间段的日志

1
sed -n '/11:11:/,/12:12:/p' filename

替换文件内所有old字符串为new

1
sed -i s/old/new/g filename

在匹配字符go前面加入内容stark

1
sed -i 's/go/stark&/' file

在匹配字符go后面加入内容stark

1
sed -i 's/go/&stark/' file

删除匹配字符的行

1
sed -i '/backup.sh/d' crontab

删除第一行和最后一行

1
sed -i '1d;$d' filename

匹配行qiao上一行插入gege

1
sed -i '/qiao/i\gege' file

匹配行qiao下一行插入gege

1
sed -i '/qiao/a\gege' file

匹配当前行root,并替换为rootbajie

1
sed -i '/root/c\rootbajie' /etc/passwd

在每行的头添加字符HEAD

1
sed -i 's/^/HEAD&/' file

在每行的尾部添加字符tail

1
sed -i 's/$/&tail/' file

修改某个范围的内容

1
sed -i '/Begin/,/End/{s/xxx/ooo/g}' filename

将想要替换的字符串分段并重新排序

1
sed 's/\(^[a-z_-]\+\):x:\([0-9]\+\):\([0-9]\+\):.*/\3 \1 \2/' passwd

有时候使用sed替换路径或网址的时候异常痛苦,转义符多的眼花缭乱,sed命令定界符除了’/‘之外还有你的整个键盘哦!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
[root@stark shell]# cat sed_learn.txt 
root /bin/bash
bin /sbin/nologin
sync /bin/sync
shutdown /sbin/shutdown
**使用常用定界符'/',可以看到转义符看起来很混乱**
[root@stark shell]# cat sed_learn.txt |sed 's/\/sbin\/nologin/\/bin\/bash/'
root /bin/bash
bin /bin/bash
sync /bin/sync
shutdown /sbin/shutdown
halt /sbin/halt
**下面替换'/'为其它定界符,可以说整个键盘都是sed可用的定界符**
//*使用特殊符号'!'为定界符(任意特殊符号都可用,不能和替换的内容重复)
[root@stark shell]# cat sed_learn.txt |sed 's!/sbin/nologin!/bin/bash!'
root /bin/bash
bin /bin/bash
sync /bin/sync
shutdown /sbin/shutdown
halt /sbin/halt
//*使用数字'5'作为定界符(任意数字都可用,不能和替换的内容重复)
[root@stark shell]# cat sed_learn.txt |sed 's5/sbin/nologin5/bin/bash5'
root /bin/bash
bin /bin/bash
sync /bin/sync
shutdown /sbin/shutdown
halt /sbin/halt
//*使用字母'z'作为定界符(任意字母都可用,不能和替换的内容重复)
[root@stark shell]# cat sed_learn.txt |sed 'sz/sbin/nologinz/bin/bashz'
root /bin/bash
bin /bin/bash
sync /bin/sync
shutdown /sbin/shutdown
halt /sbin/halt