Linux文本处理常用命令
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 | 关键字匹配时忽略关键字大小写 |
例如:1
grep '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排序的时候注意默认是按照字典的方式排序,如果按照数字时则必须加上-n
- uniq去除重复,只能去除相邻的重复,所以要先排序,后去除重复
命令 | 用途 |
---|---|
grep/egrep | 关键字查找 |
sed | 1.行的删除、添加、替换、选取 2.关键字替换 |
printf | 文本格式化输出 |
awk | 1. 将每行按分隔符拆分成列并选取某些列 2. 通过逻辑判断对不同行进行不同的处理 3.对一行中的几列数值进行计算 |
cat | 切割字符 |
sort | 排序 |