-----------sed命令-----------
说明:
sed是一个很好的文件处理工具,本身是一个管道命令,主要是以行为单位进行处理,可以将数据行进行替换、删除、新增、选取等特定工作。
sed命令行格式为:
sed [-nefri] ‘command’ 输入文本
常用选项:
-n∶使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN的资料一般都会被列出到萤幕上。
但如果加上-n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来。
-e∶直接在指令列模式上进行 sed 的动作编辑; 目的是可以使用多个表达式。
-f∶直接将 sed 的动作写在一个档案内, -f filename 则可以执行 filename 内的sed 动作;
-r∶sed 的动作支援的是延伸型正规表示法的语法。(预设是基础正规表示法语法)
-i∶直接修改读取的档案内容,而不是由萤幕输出。
常用命令:
a ∶新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
c ∶取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
d ∶删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
i ∶插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
p ∶列印,亦即将某个选择的资料印出。通常 p 会与参数 sed -n 一起运作~
s ∶取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!
例如 1,20s/old/new/g 就是啦!
例:
sed '1p' -n 1.txt
#显示第一行内容。
grep -n '.*' 1.txt |sed '1p' -n
#显示第一行并显示行号。
grep -n '.*' 1.txt |sed '1,5p' -n
#显示1到5行并显示行号。
grep -n '.*' 1.txt |sed '5,$p' -n
#显示第5行到最后一行并显示行号。
grep -n '.*' 1.txt |sed '/root/p' -n
#显示包含root的行。关键字用//包起来。
grep -n '.*' 1.txt |sed '/ro*t/p' -n
#显示匹配rt,rot,root,rooooot等字符的行。0个或多个o。
grep -n '.*' 1.txt |sed -r '/ro*t/p' -n
#同上。
grep -n '.*' 1.txt |sed '/ro\+t/p' -n
#显示含有1个或多个o匹配的行。
grep -n '.*' 1.txt |sed -r '/ro+t/p' -n
#显示含有1个或多个o匹配的行。同上。
grep -n '.*' 1.txt |sed -r '/root|mysql/p' -n
#显示包含root或者mysql的行。
grep -n '.*' 1.txt |sed -r '/(oo)+/p' -n
#显示含有两个oo或多个oo的行。
grep -n '.*' 1.txt |sed -e '/root/p' -e '/mysql/p' -n
#显示分别匹配root或者mysql的行。如果同一行既有root又有mysql,则该行被打印两次出来。(多个表达式)
grep -n '.*' 1.txt |sed '/root/p ; /mysql/p' -n
#同上,' '中间有分号; 也是多个表达式写在一起。
grep -n '.*' 1.txt |sed '1,5d'
#显示删除了1到5行的内容。
grep -n '.*' 1.txt |sed '10,$d'
#显示删除了10到最后一行的内容。
grep -n '.*' 1.txt |sed '/mysql|root/d'
#显示删除包含root或者mysql的行内容。
grep -n '.*' 1.txt |sed 's/root/toor/g'
#把文本中的root替换成toor。前面可以加行号。
grep -n '.*' 1.txt |sed 's/[0-9]//g'
#把所有数字去掉。
grep -n '.*' 1.txt |sed 's/[^0-9]//g'
#把所有非数字去掉。
head 1.txt |sed -r 's/([^:]+)(:.*:)([^:]+$)/\3\2\1/'
#把1.txt前10行的内容,:冒号最前面的内容和最后面的内容替换
#文本是以:冒号分割的内容,即[^:]+:.*:[^:]+$,非冒号多个 冒号多个 非冒号多个到结束。
#3,2,1是分段的标号。
#-r 表示不用转义。