grep
grep -v 显示不匹配的行
grep -i 不区分大小写
grep -l 只列出匹配文件名
grep -L 列出不匹配的文件名
grep -w 只匹配整个单词
grep -A number key filename 匹配关键词的后面分别显示number行
grep -B number key filename 匹配关键词的前面分别显示number行
grep -C number key filename 匹配关键词的上下分别显示number行 和grep -number key filename 效果相同
grep -o -i +文件名 只匹配关键词
grep -r -I -w “关键词” +目录 在当前目录下递归搜索关键词在哪个文件夹
grep “key” +文件名 | grep “key2”….同时匹配多个关键词 grep “123” 1.txt|grep “456”
grep 同时满足多个关键字和满足任意关键字
① grep -E “word1|word2|word3” file.txt
满足任意条件(word1、word2和word3之一)将匹配。
② grep word1 file.txt | grep word2 |grep word3
必须同时满足三个条件(word1、word2和word3)才匹配。
grep -E “key1|key2” 两个grep条件or关系 grep -E “vv|aabb” 3/1.txt
egrep “^linux” +文件名 搜索以linux开头的
egrep “3$” +文件名 搜索以3结尾的
在筛选条件后加–color 关键词颜色会高亮显示
查找s开头的行:grep ^s e.txt
查找n开头的行:grep n$ e.txt
grep后跟正则是需要加-E;加E是扩展的 不加E是原生的;如果正则表达式涵\d,则需要把-E改成-P,例如:grep -P “\d[1-3]\w*.” e.txt
sed
如果未指定行号,则是在每一行前或后处理
i是插入所以是在每行前面 a是追加所以是在每行后面
a:新增 sed -e ‘5 a string111’ filename #在文件第5行后新增 sed -e ‘3,5 a string111’ filename #在文件第3-5行后新增
c:取代 sed -e ‘3 c str1’ filename #将文件第3行取代为str1 sed -e ‘3,5 c str1’ filename #将文件第3-5行取代为str1
d:删除 sed -e ‘2 d’ filenam #将文件第二行删除 sed -e ‘2,5 d’ filename # 将文件第2-5行删除
i:插入 sed -e ‘2 i str111’ filename #在文件第2行出插入str111 #范围插入同上
p:打印
sed -n ‘/root/p’ filename #打印含有关键词root的行
sed -n ‘/root/!p’ filename #打印不含有关键词root的行
sed -n ‘/^!/p’ filename #打印以!开头的行
sed -n ‘/t$/p’ filename #打印以字母t结尾的行
s:替换 sed -e ‘s/old/new/g’ filename # 全局替换将文件内old替换为new
s:替换 sed -e ‘s/old/new’ filename # 将文件内第一个old替换为new
i:修改源文件 将上面的-e修改为-i处理时将会修改源文件(慎用)
awk
awk ‘pattern+action’ [filename]
-pattern 正则表达式
-action 对匹配到的内容执行的命令(默认是输出的每行内容)
例子:
搜索/etc/passwd文件内有root关键词的所有行,并显示对应的shell
awk -F : ‘/root/{print $0}’ /etc/passwd #搜索/etc/passwd文件内有root关键词的所有行
awk -F : ‘/root/{print $7}’ /etc/passwd #搜索/etc/passwd文件内有root关键词的所有行,并显示对应的shell
打印/etc/passwd的第二行信息
awk -F : ‘NR==2{print $0}’ /etc/passwd
筛选文件内地3行至第10行信息
awk -F : ‘{if(NR>=3 && NR <=10)print $0}’ filename
awk多个分隔符— '[ ,]'空格或者逗号是分隔符,这俩碰见哪个都算数
awk -F ‘[ ,]’ ‘{print $3 " "$7}’ bwwk.txt
多个条件—筛选文件第2-3行的数据且含有2809
awk -F : ‘/2809/{if(NR>=2 && NR <=3)print $0}’ awwk.txt
给打印出来的信息加个标题
awk -F : ‘BEGIN{print “title”} {if(NR>=2 && NR <=3)print $0}’ awwk.txt
自定义分隔符
echo “111 222|333 444|555 666” |awk ‘BEGIN{RS="|"}{print $0}’
awk和grep配合使用,两个条件关系为and
awk -F : ‘{if(NR>=2 && NR <=3)print $0}’ awwk.txt | grep ‘2809’ --color
把两个文件按照对应的每行放在同一行上,可以用paste
paste filename1 filename2 #未设置分隔符默认tab键
paste -d “=” filename1 filename2 #设置分隔符为=