Linux文本处理常用的3个命令,脚本或者文本处理任务中会用到。这里做个整理。
三者的功能都是处理文本,但侧重点各不相同,grep更适合单纯的查找或匹配文本,sed更适合编辑匹配到的文本,awk更适合格式化文本,对文本进行较复杂格式处理。
1、grep
grep的全称是Global Regular Expression Print,全局正则表达式打印。用于文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来(就是只要一行里有对应的字符被匹配到,这一行都会被打印出来)。
grep加上正则匹配会有很多功能,但我目前只常用一些简单的:
- xxx | grep AA 在命令的输出后提取AA关键词并显示。可以过滤其他不关心的输出
- grep -r “xxx” . 在当前目录及其中所有文件中查找包含xxx的文件和语句。我在找不到某句话出自哪个文件时会用
2、sed
linux下输入sed会显示他的用法:
-n:静默模式,仅打印由 p 命令指定的行。
-e script:直接在命令行模式中添加 sed 脚本。
-f script-file:从文件中读取 sed 脚本。
-i:直接编辑文件。
注意只有-i才会直接修改文件,其余的都是打印到终端,或者可以输出到另一个文本中。
常见命令
- 匹配行,打印 ( p ):打印指定行或匹配的行。
注意想只输出其中的几行只用’20,40p’不行,必须加上-n,否则会打印所有行 - 增加(a)/插入(i),删除 (d),替换(s)
替换匹配行的关键字(s/regexp/replacement/flags):
s 代表替换命令
regexp 是一个正则表达式,用于匹配要替换的文本。
replacement 是用来替换匹配文本的新文本。
flags 是可选的标志,用于修改替换行为。 g表示全局替换,不加的话只替换匹配到的第一行
sed -n '20,40p' input.txt 只打印txt中的20到40行
sed '5,10d' input.txt 删除5-10行
sed