sed工具
sed是一个很好的文件处理工具,本身是一个管道命令,主要是以行为单位进行处理,可以将数据行进行替换、删除、新增、选取等特定工作,下面先了解一下sed的用法
常用选项:
-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 就是啦!
测试文件如下:
1111
2222
3333
4444
5555
6666
7777
8888
9999
删除
添加
替换
sed ‘s/要被替换的字符串/新字符串/g’
sed 's/test/*&*/g' file 符号&代表查找串。 test将被替换为*test*
查看
sed '/pattern/action' file
查看以1开头的行:
sed -n '/^1/p' file
以上的命令都不对file文件产生影响,而一旦我们加上了-i选项就可以直接改变原文件了
将文件的每一行最后“.”替换为“!”
在文件的最后一行加上###
awk工具
awk是以行为单位处理文件,但是它比sed更强的地方在于它还能以列的方式处理文件,对于awk来说,一行内容可以称作为一个记录,默认的行分隔符为\n,一列内容可称作为一个域,默认的列分隔符是空格和tab,但是行列分隔符都可以自己设定。
awk实际是一门脚本语言,语法有点类似C语言
一般以以下方式使用:
直接在命令行:
awk options ‘script’ file1 file2...
脚本方式:
awk options -f scriptfile file1 file2...
./scriptfile file1 file2
比如打印file第二列的内容
awk ‘{print $2}’ file脚本方式如下图:
一般编辑awk格式如下:
/pattern/{actions}
condition{actions}
awk命令的conditions部分还可以是BEGIN和END,这两分别代表处理文件之前以及处理文件之后执行一次操作,具体如下:
上述是求1-9相加的和,BEGIN在文件处理之前定义i=0,中间就像C语言一样用循环相加,最后END在文件处理完执行打印操作。
设置域分隔符为c,输出时候设置输出分隔符为###
统计一个文件里面的错误: