sed基操

sed –n ‘p’ /etc/passwd

执行多个命令:
sed [ options ] –f {sed-commands-in-a-file} {input-file}
$ cat test_script.sed
/^root/ p
/^nobody/ p
sed –n –f test_script.sed /etc/passwd

sed –e ‘command1’ –e ‘command2’ –e ‘command3’
sed –n -e /^root/ p -e /^nobody/ p /etc/passwd

打印:
sed -n ‘2 p’ employee.txt
sed -n ‘1,4 p’ employee.txt
sed -n ‘2,$ p’ employee.txt
sed -n ‘1~2 p’ employee.txt 1~2 匹配 1,3,5,7,…… 2~2 匹配 2,4,6,8,……
sed -n ‘/Jane/ p’ employee.txt
sed -n ‘/Raj/,$ p’ employee.txt
sed -n ‘/Raj/,/Jane/ p’ employee.txt
sed -n ‘/Jane/,+2 p’ employee.txt

删除:
sed ‘2 d’ employee.txt
sed ‘/^$/ d’ employee.txt
sed ‘/^#/ ‘ employee.txt

写入:
sed ‘w output.txt’ employee.txt
sed -n ‘w output.txt’ employee.txt
sed -n ‘2 w output.txt’ employee.txt

替换:
sed ‘s/Manager/Director/’ employee.txt
sed ‘/Sales/s/Manager/Director/’ employee.txt
sed ‘s/a/A/’ employee.txt
sed ‘s/a/A/g’ employee.txt
sed ‘s/a/A/2’ employee.txt
sed -n ‘s/John/Johnny/p’ employee.txt
sed -n ‘s/John/Johnny/w output.txt’ employee.txt
sed ‘s/john/Johnny/i’ employee.txt

cat files.txt
/etc/passwd
/etc/group

sed ‘s/^/ls -l/’ files.txt
ls -l/etc/passwd
ls -l/etc/group

sed ‘s/^/ls -l /e’ files.txt
-rw-r–r-- 1 root root 1533 Dec 13 20:21 /etc/passwd
-rw-r–r-- 1 root root 682 Dec 13 20:21 /etc/group

sed -n ‘s/manager/Director/igpw output.txt’ employee.txt

定界符:
sed ‘s|/usr/local/bin|/usr/bin|’ path.txt
sed ‘s^ /usr/local/bin^ /usr/bin^’ path.txt
sed ‘s@/usr/local/bin@/usr/bin@’ path.txt
sed ‘s!/usr/local/bin!/usr/bin!’ path.txt

分组以及引用
sed ‘s/[0-9][0-9]/[&]/’ employee.txt
sed ‘s/^.*/<&>/’ employee.txt
sed ‘s/ \ (. * \ ). */\1/’ employee.txt

echo "The Geek Stuff"|sed -n 's/\(\b[A-Z]\)/(\1)/pg' 
(T)he (G)eek (S)tuff 

sed 最多能处理 9 个分组,分别用\1 至\9 表示

GNU Sed 专有的替换标志
\l 标志
sed -n ‘s/John/JO\lHNNY/p’ employee.txt
101,JOhNNY Doe,CEO
\L 标志
sed -n ‘s/John/JO\LHNNY/p’ employee.txt
101,joHnny Doe,CEO
\u 标志
\U 标志
\E 标志
sed -n ‘s/John/\UJohnny\E boy/p’ employee.txt
101,JOHNNY boy Doe,CEO

sed 正则表达式
^ 匹配每一行的开头
$匹配行的结尾
元字符点 . 匹配除换行符之外的任意单个字符
星号匹配 0 个或多个其前面的字符
\ +匹配一次或多次它前面的字符
\ ?匹配 0 次或一次它前面的字符
如果要在正则表达式中搜寻特殊字符(如:
,.),必需使用\来转义它们
字符集 [0-9]
管道符号|用来匹配两边任意一个子表达式
正则表达式后面跟上{m}标明精确匹配该正则 m 次
sed -n ‘/[0-9]\ {5\ }/ p’ numbers.txt
匹配 m 至 n 次 ( {m,n} ): 正则表达式后面跟上{m,n}表明精确匹配该正则至少 m,最多 n 次。m 和 n 不能是负数,并 且要小于 255.
正则表达式后面跟上{m,}表明精确匹配该正则至少 m
sed -n ‘/[0-9]\ { 3,5\ } / p’ numbers.txt
字符边界 \b
sed -n ‘/\bthe\b/ p’ words.txt
回溯引用 \n
sed -n ‘/(the)\1/ p’ words.txt

sed 注释以#开头

修改:
sed -i ‘s/John/Johnny/’ employee.txt
修改并备份:
sed -ibk ‘s/John/Johnny/’ employee.txt

插入:
命令 a 可以在指定位置的后面插入新行
sed ‘2 a 203,Jack Johnson,Engineer’ employee.txt
追加多行之间用\n 来换行
sed ‘/Jason/a 203,Jack Johnson,Engineer\n204,Mark Smith,Sales Engineer’ employee.txt
命令i在指定位置之前插入行
sed ‘2 i 203,Jack Johnson,Engineer’ employee.txt
命令 c可以用新行取代旧行
sed ‘2 c 202,Jack,Johnson,Engineer’ employee.txt
等价于sed ‘2s/.*/202,Jack,Johnson,Engineer/’ employee.txt

打印不可见字符
cat tabfile.txt
fname First Name
lname Last Name
mname Middle Name

sed -n ‘l’ tabfile.txt
fname\tFirst Name$
lname\tLast Name$
mname\tMiddle Name$

打印行号(命令=)
sed ‘=’ employee.txt
1
101,Johnny Doe,CEO
2
102,Jason Smith,IT Manager
3
103,Raj Reddy,Sysadmin

sed ‘/Raj/ =’ employee.txt
101,Johnny Doe,CEO
102,Jason Smith,IT Manager
3
103,Raj Reddy,Sysadmin
操作多个文件
sed -n ‘/root/ p’ /etc/a /etc/b

打印模式空间(命令 n)
sed n employee.txt

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值