在Linux系统下工作的朋友都会遇到文本处理的事情,通常可以使用vim等编辑工具,但是,如果你学会了grep、awk、sed这三个神器,妈妈再也不用担心我的文本处理了。
grep
文本过滤工具,支持正则表达式查找,输出匹配的行。命令格式:
grep [option] pattern filename
常用例子:
#-n显示行号,-i忽略字符大小写
grep -n -i "abc" filename
#-v反向匹配,-r递归搜索文本
grep -v -r "abc" dirname/
sed
sed是一种流编辑器,支持正则表达式使用。默认只处理模式空间,不处理原数据,且sed是针对一行行数据来进行处理的。命令格式为:
sed [option] 'command' filename
command格式:地址界定+编辑命令
地址界定:
空地址---对全文每一行编辑
数字[,数字]---指定行号或行号范围
/pattern/---匹配行编辑
$---最后一行编辑
编辑命令:
d---删除
a---下一新行追加字符串
i---上一新行插入字符串
c---字符串替换某行
s---在行中搜索替换
常用例子:
# g表示全局替换, -i表示原地替换;
sed -i 's/oldstring/newstring/g' filename
#最后一行添加,输出只作处理的行
sed -n '$a hello world' filename
awk
awk是文本格式化工具,用于生成文本报告或对文本列处理。
# -F分割域
#按空格或逗号分割每行,并打印第1列(分割域为$1...),$0表示所有域
awk -F '[ ,]' '{printf("%s:%s\n",$4,$10)}' my.txt
#按冒号分割每行,搜索定位到以hello开头的行,打印分割域3,从第2个字符开始,打印6个
awk -F ':' '/^hello/ {print substr($3, 2, 6)}' my.txt
后话
Linux下的命令超级多,记起来麻烦,不记得了可以来这查查,命令敲多了,就记得了。