linux命令三剑客:awk,grep,sed
1.awk
(1)针对文件进行读取过滤:
打印出每一行:awk '{print $0}' test.txt ------------$0表示一整行,$1表示通过空格分割后的第一个元素 ,$2 为第二个元素
通过 -F 指定分割符: awk -F ':' '{print $1}' test.txt ----------标识每一行用:分割成的元素,打印第一个
(2)处理管道中的内容:
获取当前目录列表的某列元素: ls | awk '{print $1}'
增加正则过滤,或者条件过滤: cat test.txt | awk {if {$1>0} print $1}
cat test.txt |awk '{/a*a/ print $1 }'
2.grep
(1)grep ' aaa' test.txt 过滤出包含有aaa的行
(2)cat test.txt |grep 'g*' 过滤出包含g开头的行
3.sed
sed命令的选项(option):
-n :只打印模式匹配的行
-e :直接在命令行模式上进行sed动作编辑,此为默认选项
-f :将sed的动作写在一个文件内,用–f filename 执行filename内的sed动作
-r :支持扩展表达式
-i :直接修改文件内容
动作说明:
- a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
- c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
- d :删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
- i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
- p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~
- s :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g 就是啦!
注:如果没有加上 -i 是没有实际的修改文件内容的
未修改源文件:sed '2a 123456' test.txt
修改了源文件:sed -i '2a 123456' test.txt --在第二行后边加了一行 123456
对文件的的增删改查:
(1)增加 a,i
sed -i '2a 123456' test.txt --在第2行的后面加1行
sed -i '1,3a 123456' test.txt --在1,2,3行后边各增加1行
sed -i '1i 123456' test.txt --在第1行的前面加1行
(2)删除 d
sed -i '2d' test.txt --删除第二行
sed -i '1,3d ' test.txt --删除1,2,3行
(3)更改 c,s
sed -i '2c 123456' test.txt --把第二行替换成123456
sed -i '1,2c 123456' test.txt --把1,2行替换成一行 123456
sed 's/old/new/' test.txt --默认替换每一行的第一个old,换成new
sed 's/old/new/gi' test.txt --匹配所有old替换为new,g 代表一行多个,i 代表匹配忽略大小写
sed '3,9s/old/new/gi' test.txt --替换3到9行的所有old,换成new,区分大小写
(4)查询、打印
sed -n '1,3p' test.txt --打印1-3行
sed -n '/222/p' test.txt --打印正则匹配到222的行
sed -n '/222/!p' test.txt --打印正则没有匹配到的行
(5)执行多条命令-e,执行文件中的命令-f
sed -e 's/系统/00/g' -e '2d' test.txt
sed -f ab.log test.txt