Linux三剑客笔记分享

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 #设置分隔符为=

6 个赞

mark