linux文本三剑客
- 1、grep
- 2、sed
1、grep
过滤
参数 | 用法 | 作用 |
---|---|---|
-i | grep -i STRING xxx.txt | 从xxx.txt文件查找不区分大小写STRING |
-w | grep -w STRING xxx.txt | 精确匹配STRING |
-e | grep -e STRING1 -e STRING2 xxx.txt | 查找多个STRING行 |
-n | grep -n STRING xxx.txt | 查看STRING 在第几行 |
-v | grep -v STRING xxx.txt | 输出不包含STRING的行 |
-r | grep -r STRING DIR/ | 查找DIR目录下哪个文件包含STRING,-lr就只输出同一个文件名称 |
-E | grep -E 'aaa | bbb’ xxx.txt |
-C | grep STRING -C 5 xxx.txt | 查看上下5行 |
2、sed
逐行读取并处理文件
增删改查
args 参数 | ||
参数 | 用法 | 作用 |
-e | sed -e '表达式' xxx.txt | 接表达式,可以接多个-ne -e |
-ie | sed -ie '表达式' xxx.txt | e可以省略,加上-e后会生成一个 xxx.txte的原文件作为副本方便恢复,但是-i -e 并不会生成副本文件;-i确认修改生效 |
表达式 | ||
xi | 第x行前插入yyy | sed -e '2i\hello world' xxx.txt |
xa | 第x行后插入yyy | sed -e '2a\hello world' xxx.txt |
xd | 删除第x行 | sed -e '4d' xxx.txt |
xc | 覆盖第x行(整行替换) | sed -e '1c\aaaa' xxx.txt |
xs | 替换第x行的yyyy为kkk(局部替换) | sed -e '2s/yyyy/kkk/' xxx.txt,这里只能替换一个yyyy,如果存在多个yyyy可以使用'2s/yyyy/kkk/g',表示把第2行中所有的yyyy替换为kkk |
xp | 指定打印第x行 | sed -e '1p' xxx.txt,,但是用-e 会把缓存区的数据也读出来,改为-n(表示只采用改变的内容)即可 |
sed -e '表达式' xxx.txt
例如:
在第二行插入(i)hello world
# 2 指第2行
# i指行前插入 insert
# 用 \ 隔开文本内容
sed -e '2i\hello world' test20230823.txt