sed&awk的一些常用命令


目录

6.sed 替换命令语法

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

上面提到的语法为:  address-range 或 pattern-range(即地址范围和模式范围)是可选的。如果没有指 定,那么 sed 将在所有行上进行替换。  s 即执行替换命令 substitute  original-string 是被 sed 搜索然后被替换的字符串,它可以是一个正则表达式  replacement-string 替换后的字符串  substitute-flags 是可选的,下面会具体解释

请谨记原始输入文件不会被修改,sed 只在模式空间中执行替换命令,然后输出模式空间的内容。

下面是一些简单的替换示例(替换的部分用黑体标明)
用 Director 替换所有行中的 Manager:

$ sed 's/Manager/Director/' employee.txt 
101,John Doe,CEO 
102,Jason Smith,IT Director 
103,Raj Reddy,Sysadmin 
104,Anand Ram,Developer 
105,Jane Miller,Sales Director 

只把包含 Sales 的行中的 Manager 替换为 Director:

$ sed '/Sales/s/Manager/Director/' employee.txt 
101,John Doe,CEO 
102,Jason Smith,IT Manager  
103,Raj Reddy,Sysadmin 
104,Anand Ram,Developer 
105,Jane Miller,Sales Director 
#注意:本例由于使用了地址范围限制,所以只有一个Manager被替换了

7.全局标志 g

g 代表全局(global) 默认情况下,sed 至会替换每行中第一次出现的 original-string。如果你要 替换每行中出现的所有 original-string,就需要使用 g

用大写 A 替换第一次出现的小写字母 a:

$ sed 's/a/A/' employee.txt 
101,John Doe,CEO 
102,JAson Smith,IT Manager 
103,RAj Reddy,Sysadmin 
104,AnAnd Ram,Developer 
105,JAne Miller,Sales Manager 

把所有小写字母 a 替换为大写字母 A:

$ sed 's/a/A/g' employee.txt 
101,John Doe,CEO 
102,JAson Smith,IT MAnAger 
103,RAj Reddy,SysAdmin 
104,AnAnd RAm,Developer 
105,JAne Miller,SAles MAnAger 
#注意:上述例子会在所有行上替换,因为没有指定地址范围。 

8.数字标志(1,2,3 ….)

使用数字可以指定 original-string 出现的次序。只有第 n 次出现的 original-string 才会触发替 换。每行的数字从 1 开始,最大为 512。
比如/11 会替换每行中第 11 次出现的 original-string
下面是几个例子: 把第二次出现的小写字母 a 替换为大写字母 A:

$ sed 's/a/A/2' employee.txt 
101,John Doe,CEO 
102,Jason Smith,IT MAnager 
103,Raj Reddy,SysAdmin 
104,Anand RAm,Developer 
105,Jane Miller,SAles Manager 

为了方面下面示例,请先建立如下文件:

$ vim substitute-locate.txt 
locate command is used to locate files 
locate command uses database to locate files 
locate command can also use regex for searching 

使用刚才建立的文件,把每行中第二次出现的 locate 替换为 find:

$ sed 's/locate/find/2' substitute-locate.txt 
locate command is used to find files 
locate command uses database to find files 
locate command can also use regex for searching 
#注意:第 3 行中 locate 只出现了一次,所以没有替换任何内容 

9.打印标志 p(print)

命令 p 代表 print。当替换操作完成后,打印替换后的行。与其他打印命令类似,sed 中比较 有用的方法是和-n 一起使用以抑制默认的打印操作。

只打印替换后的行:

$ sed -n 's/John/Johnny/p' employee.txt 
101,Johnny Doe,CEO 

在之前的数字标志的例子中,使用/2 来替换第二次出现的 locate。第 3 行中 locate 只出现了 一次,所以没有替换任何内容。使用 p 标志可以只打印替换过的两行.
把每行中第二次出现的 locate 替换为 find 并打印出来:

$ sed -n 's/locate/find/2p' substitute-locate.txt 
locate command is used to find files l
ocate command uses database to find files 

10.写标志 w

标志 w 代表 write。当替换操作执行成功后,它把替换后的结果保存的文件中。多数人更倾 向于使用 p 打印内容,然后重定向到文件中。为了对 sed 标志有个完整的描述,在这里把这 个标志也提出来了。
只把替换后的内容写到 output.txt 中:

$ sed -n 's/John/Johnny/w output.txt' employee.txt 
$ cat output.txt 101,Johnny Doe,CEO 
#和之前使用的命令 p 一样,使用 w 会把替换后的内容保存到文件 output.txt 中。 

把每行第二次出现的 locate 替换为 find,把替换的结果保存到文件中,同时显示输入文件所有内容:

$ sed 's/locate/find/2w output.txt' substitute-locate.txt 
locate command is used to find files 
locate command uses database to find files 
locate command can also use regex for searching 
$ cat output.txt 
locate command is used to find files 
locate command uses database to find files 

文章作者: Roc-May
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Roc-May !
  目录