Linux文本处理常用命令:grep、sed、printf、awk、cut、sort
1. grep
按行查找字符,输出包含字符的行
用法grep ‘key’ test.txt
cat test.txt|grep ‘key’参数含义及示例-n输出结果加行号
–color=auto匹配的关键字高亮显示
-A2输出匹配行的后两行
-B2输出匹配行的前两行
-v反向查找,即输出不包含关键字的行
-i关键字匹配时忽略关键字大小写
例如:1grep 'o{3}' //查找两个o,这里需要注意,{}在shell里有特殊意义,因此需要转义。
egrep:
正则表达式分为基本正则表达式和扩展正则表达式,grep只支持基本正则表达式,如果要使用扩展正则表达式,需要使用egrep命令
列如:1
2
3egrep '123|1234' //查找123或1234
egrep '1(23|234)5' //查找1235或12345
egrep '1(23)+45' //查找1X45,其中X是一个或一个以上的‘23’字符串
2.sed
sed可以用来做行删除、行新增、行选取、行替换、字符串替换
使用方式:cat test.txt | sed ‘2d’ 或者 sed ‘2d’test.txt行删除
sed ‘2,5d’ //删除第2-5行
sed ‘3,$d’ //删除第3到最后一行
sed ‘/^$/d’//删除空行
行新增
sed ‘2a abc’ //在第二行下面追加一行“abc”,a代表append
sed ‘2i abc’ //在第二行上面插入一行 “abc”,i代表insert
sed ‘2a a
b
c’ //在第二行下面追加三行 “a”、”b”、”c”,只需要每行结尾加””即可。
行选取
sed -n ‘7,9p’ //选取第5到7行输出,必须加-n参数,不然效果就是所有行都被输出,而7到9行输出两次。
行替换
sed ‘2,5c abc’ //将第2到5行替换为一行字符串”abc”
字符串替换
sed ‘s/要被替换的字符串/新的字符串/g’ /可以是#号之类的,在被替换的字符串包含/时,可以考虑别的分隔符。要被替换的字符串可以是
正则表达式
注意:1
2
3
4
5
6
7
8
9
10操作特定区间或规则的行
sed '8,$s/aa/AA/g' test.txt 对第8行到文件末尾的所有行进行搜索替换操作
sed '/^[0-9]/s/aa/AA/g' test.txt 正则表达式表示对所有以数字开头的行,执行s操作
sed的正则中 () 和 {m,n} 需要转义
. 表示任意字符
* 表示零个或者多个
+ 一次或多次
? 零次或一次
| 表示或语法
3. printf
格式化并打印数据
printf ‘%10s %10s %10s %10s %10s n’ cat test.txt %10s代表这一列的宽度固定为10个字符
%-10s 指一个宽度为10个字符(-表示左对齐,没有则表示右对齐)
4. awk
NF :每一行分隔后的列数
NR :行号
FS=”,”:以”,”分割行
cat test.txt |awk ‘NR==1 {printf “%10s %10s %10s %10s %10s n”,$1,$2,$3,$4,”Total”};NR>1 {printf “%10s %10s %10s %10s %10s n”,$1,$2,$3,$4,$2+$3+$4}’加入条件判断后,awk的格式为: awk ‘条件1 {命令1};条件2{命令2}’
条件判断有以下逻辑运算:1
2
3
4
5
6>
<
>=
<=
== //注意判断相等要用两个等号
!=
可以直接运算行内列的值($1、$2、$3)。
5. 其他
1)cut切割字符以“,”切割文件并取出第1列
cat test.txt |cut -d ‘,’ -f 1| sort | uniq -c | sort -rn -k1 > new_test.txt
2)sort排序的时候注意默认是按照字典的方式排序,如果按照数字时则必须加上-nuniq去除重复,只能去除相邻的重复,所以要先排序,后去除重复命令用途grep/egrep关键字查找
sed1.行的删除、添加、替换、选取
2.关键字替换
printf文本格式化输出
awk1. 将每行按分隔符拆分成列并选取某些列
2. 通过逻辑判断对不同行进行不同的处理
3.对一行中的几列数值进行计算
cat切割字符
sort排序