sed常见用法

sed替换命令

语法为:

sed ‘ [ address-range | pattern-range ] s/original-string/replacement-string/[substitute-flags] ’input-file

l address-range或pattern-range(即地址范围和模式范围)是可选的,如果没有指定,那么sed将在所有行上进行替换

用Directory替换所有行中的Manager
[root@sishen ~]# sed 's/Manager/Director/' employee.txt

只把包含Sales的行中的Manager替换为Director
[root@sishen ~]# sed '/Sales/s/Manager/Director/' employee.txt

用大写A替换第一次出现的小写字母a
[root@sishen ~]# sed 's/a/A/' employee.txt

把所有小写字母a替换为大写字母A
[root@sishen ~]# sed 's/a/A/g' employee.txt

注意上述例子会在所有行上进行替换,因为没有指定地址范围

把第二次出现的小写字母a替换为大写字母A
[root@sishen ~]# sed 's/a/A/2' employee.txt

把每行中第二次出的locate替换为find
[root@sishen ~]# sed 's/locate/find/2' substitute-locate.txt

打印标志p(print),只打印替换后的行
[root@sishen ~]# sed -n 's/John/Johnny/p' employee.txt

在之前的数字标志的例子中使用/2来替换第二次出现的locate。第3行中locate只出现了一次所以没有替换任何内容,使用p标志可以只打印替换过的两行
[root@sishen ~]# sed -n 's/locate/find/2p' substitute-locate.txt

写标志w,只把替换后的内容写入到out6.txt文件中
[root@sishen ~]# sed -n 's/John/Johnny/w out6.txt' employee.txt

把每行中第二次出现的locate替换为find,把替换后的结果保存到文件中,同时显示输入文件所有内容
[root@sishen ~]# sed 's/locate/find/2w out7.txt' substitute-locate.txt

[root@sishen ~]# sed -n 's/locate/find/2w out7.txt' substitute-locate.txt

注意加上-n参数就不会输出显示在屏幕上,忽略大小写标志i(ignore)
[root@sishen ~]# sed 's/john/Johnny/' employee.txt
[root@sishen ~]# sed 's/john/Johnny/i' employee.txt
[root@sishen ~]# cat bash-file.txt
/etc/passwd
/etc/group

在bash-file.txt文件中的每行前面添加 ls -l 并打印结果
[root@sishen ~]# sed 's/^/ls -l/' bash-file.txt
ls -l/etc/passwd
ls -l/etc/group

在bash-file文件中的每行前面添加ls -l 并把结果作为命令执行
[root@sishen ~]# sed 's/^/ls -l /e' bash-file.txt
-rw-r--r-- 1 root root 1623 Oct 12 10:23 /etc/passwd
-rw-r--r-- 1 root root 818 Oct 12 10:23 /etc/group

下面的例子将把每行中出现的所有Manager或manager替换为Directory。然后把替换后的内容打印到屏幕上,同时把这些内容保存到out8.txt文件中
[root@sishen ~]# sed -n 's/manager/Director/igpw out8.txt' employee.txt

[root@sishen ~]# cat path.txt
reading /usr/local/bin directory

[root@sishen ~]# sed 'sA/usr/local/bin/A/usr/bin/A' path.txt
reading /usr/local/bin directory

[root@sishen ~]# sed 's|/usr/local/bin|/usr/bin|' path.txt
reading /usr/bin directory

[root@sishen ~]# sed 's@/usr/local/bin@/usr/bin/@' path.txt
reading /usr/bin/ directory

[root@sishen ~]# sed 's^/usr/local/bin^/usr/bin^' path.txt
reading /usr/bin directory

[root@sishen ~]# sed 's!/usr/local/bin!/usr/bin!' path.txt
reading /usr/bin directory

下面的例子演示了在模式空间内执行两个替换命令的过程
[root@sishen ~]# sed '{
> s/Developer/IT Manager/
> s/Manager/Director/
> }' employee.txt #注意空格

把每一行放进<>中
[root@sishen ~]# sed 's/^.*/<&>/' employee.txt
<101,John Doe,CEO>
<102,Jason Smith,IT Manager>

  

你可能感兴趣的:(sed常见用法)