正则表达式--sed工具
本帖最后由 Zbrel 于 2017-8-30 22:17 编辑sed工具
sed本身是一个管道命令,可以分析standerd input,还可以将数据进行取代、删除、新增、撷取特定行等。
sed [-nefri] [动作]
-n :使用安静(silent)模式。在一般 sed 的用法中,所有来自standerd input的数据一般都会被列出到屏幕上。但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来。
-e :直接在指令列模式上进行 sed 的动作编辑;
-f :直接将 sed 的动作写在一个档案内, -f filename 则可以执行 filename 内的sed 动作;
-r :sed 的动作支持的是延伸型正则表达式的语法。 (预设是基础正则表示式语法)
-i :直接修改读取的档案内容,而不是由屏幕输出。
动作说明: ]function
n1, n2 :不见得会存在,一般代表选择进行动作的行数,举例来说,如果动作是需要在 10 到 20 行之间进行的,则10,20[动作行为]
function 有:
a :新增, a 的后面可以接字符串,而这些字符串会在新的一行出现(目前的下一行)
c :取代, c 的后面可以接字符串,这些字符串可以取代 n1,n2 之间的行
d :删除,因为是删除啊,所以 d 后面通常不接任何东西
i :插入, i 的后面可以接字符串,而这些字符串会在新的一行出现(目前的上一行);
p :打印,即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运作
s :取代,可以直接进行取代的工作,通常这个 s 的动作可以搭配正则表达式!例如 1,20s/old/new/g
1.以行为单位的新增/删除功能
① 将 /etc/passwd 的内容列出并且打印行号,同时将第 2~5 行删除:
nl /etc/passwd | sed ‘2,5d’注:sed 后面接的劢作,务必以 '' 两个单引号括住。
② 删除第 3 到最后一行:nl /etc/passwd | sed ‘3,$d’ 钱字号$ 代表最后一行
③ 在第二行后加上abc: nl /etc/passwd | sed ‘2a abc’
在第二行前加上abc: nl /etc/passwd | sed ‘2i abc’
④ 在第二行后面加入两行字:nl /etc/passwd | sed ‘2a abc\>def’(输入’2a abc\后Enter键,再输入def’)
2.以行为单位的取代与显示功能
① 将第 2-5 行的内容取代为abc:nl /etc/passwd | sed ‘2,5c abc’
② 仅列出 /etc/passwd 档案内的第 5-7 行:nl /etc/passwd | sed -n‘5,7p’
3.部分数据的搜寻并取代的功能
除了整行的处理模式之外, sed 还可以行为单位进行部分数据的搜寻并取代的功能,sed的搜寻并取代与 vi 相当的类似,像这样:sed ‘s/被取代的字符串/新的字符串/g’
4.直接修改档案内容(危险动作)
① 利用 sed 将 1.txt 内每一行结尾若为 . 则换成 ! :sed -i ‘s/\.$/\!/g’ 1.txt
② 利用 sed 直接在 1.txt 最后一行加入# This is a test :
sed -i ‘$a # This is a test’ 1.txt 学习
页:
[1]