grep sed awk 三剑客
grep
从单个文件中查找指定的字符串
grep "string" file
2、从多个文件中查找指定的字符串
grep "string" file*
查询且忽略大小写
grep -i
在文件中匹配正则表达式
基础正则表达式:
'^': 锚定行首
'$': 锚定行尾
'.': 匹配任一一个字符
'*': 匹配零个或多个先前字符
'?':匹配其前面的字符0次或者1次;
'+':匹配其前面的字符1次或者多次;
'{m}':匹配其前面的字符m次(\为转义字符)
'{m,n}':匹配其前面的字符至少m次,至多n次
():将一个或多个字符捆绑在一起,当做一个整体进行处理,反向引用照常使用。
'|':或(注:'C|cat'为C与cat,'(C|c)at才是Cat与cat')
'[]': 匹配一个指定范围内的字符 | '[^]'匹配指定范围外的任意单个字符
'\<'或'\b':锚定词首,'\>'或'\b':锚定词尾(可用\<PATTERN\>:匹配完整单词)
'\(\)':将多个字符当做一个整体进行处理
后向引用:引用前面的分组括号中的模式所匹配到的字符
分组括号中的模式匹配到的内容或被正则表达式引擎自动记录于内部的变量中:
\1:模式从左侧起,第一个左括号及与之匹配的右括号之间模式匹配到的内容
\2:模式从左侧起,第二个左括号及与之匹配的右括号之间模式匹配到的内容...
用grep -A,-B,-C 来查看after/before/around 行
-A, 显示匹配后N行
-B, 显示匹配前N行
-C, 显示匹配前后N行
显示行数
grep -n
计算匹配的字符串行数
grep -c
#计算找到‘搜索字符串’的行数
只显示匹配的字符串
grep -o
搜索所有的文件及子目录
grep -r
#当指定要查找的是目录而非文件时,必须使用这项参数,否则grep命令将回报信息并停止动作
过滤匹配项
grep -v
例子:
取非空和非#
grep -v '^$' filename |grep -v '^#'
egrep -v '^$|^# ' filename
文章中出现多少个string
grep -o "string" filename |wc -l
sed
语法
sed [参数] '条件-处理方式' 文件
a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
d :删除,因为是删除啊,所以 d 后面通常不接任何东东;
i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~
s :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g 就是啦
sed -e 是可以在一行里执行多条命令 sed -e 's/wang/w/g;s/xu/x/g' user.txt
根据文件内容的行号进行查询:
sed -n '3p' person.txt #显示单行信息
sed -n '1,3p' person.txt #根据行号信息,输出多行内容(连续)
sed -n '1p;3p' person.txt #根据行号信息,输出多行内容(不连续)
根据文件内容的信息进行查询:
sed -n '/oldboy/p' person.txt #将有oldboy行的信息找出来 (单行)
sed -n '/oldboy/,/Alex/p' person.txt #将有oldboy到alex行的信息都输出出来 (行连续)
sed -n '/oldboy/p;/Alex/p' person.txt #将有oldboy和alex行的信息都输出出来 (行不连续)
在文件第一行添加信息:
sed '1i100,oldgirl,UFO' person.txt
例子
sed '/weimengle/a xxxx' b #文件b 在文件b中找到weimengle,在weimengle这一行之后添加xxxx
nl /etc/passwd | sed '2,5d' #将 /etc/passwd 的内容列出并且列印行号,同时,请将第 2~5 行删除!