文本处理三剑客笔记整理
1. grep
功能:文本过滤
- 基本用法:
grep [OPTIONS] PATTERN [FILE...]
- 元字符:
^
:以什么开头$
:以什么结尾.
:任意单个字符*
:前面的字符出现0次或多次+
:前面的字符出现1次或多次(扩展正则)?
:前面的字符出现0次或1次(扩展正则){}
:前面的字符出现指定次数(扩展正则,如{n,m}
)|
:选择,匹配左边或右边的表达式(扩展正则)[]
:字符集合,匹配集合中的任意字符\b
:单词边界()
:分组(扩展正则)
- 选项:
-E
:使用扩展正则表达式-i
:忽略大小写-v
:反向选择,只显示不匹配的行-n
:显示匹配的行号-A n
:显示匹配行及之后的n行-B n
:显示匹配行及之前的n行-C n
:显示匹配行及前后各n行-o
:只显示匹配到的字符串
2. sed
功能:文本替换
- 基本用法:
sed [OPTION]... {script-only-if-no-other-script} [input-file]...
- 内部命令:
p
:打印d
:删除a
:追加i
:插入s
:替换c
:整行替换
- 选项:
-i
:直接修改文件内容-r
或-E
:使用扩展正则表达式
- 替换语法:
sed 's/原字符串/新字符串/[g]' 文件名
g
:全局替换- 数字:指定替换第几个匹配项
- 示例:
sed -i -r '/^zhang|^feng/ s/caojie/zhangjie/' name.txt#将文件中以zhang或feng开头的行中的caojie替换为zhangjie
sed -i '/^SELINUX=/ c SELINUX=disabled' config#将SELINUX行整行替换为SELINUX=disabled
3. awk
功能:文本截取
- 基本用法:
awk [options] 'program' file...
- 程序结构:
BEGIN{...} pattern {action} END{...}
- 内建变量:
NR
:当前记录数(行号)NF
:当前记录中的字段数$0
:当前记录$1
,$2
, ...:当前记录的第1个、第2个字段...FS
:输入字段分隔符(默认为空白字符)OFS
:输出字段分隔符(默认为一个空格)
- 选项:
-F fs
:指定输入字段分隔符-v var=value
:定义awk变量
- 数组:支持关联数组,下标可以是字符串
- 示例:
awk -F: '{print $1, $3, $NF}' /etc/passwd#打印/etc/passwd文件的用户名、用户ID和最后一个字段
awk -v var=$1 -F: '$1==var{print NR,$0}' /etc/passwd#根据传入的用户名打印该用户的行号和整行内容
通配符
*
:任意个任意字符?
:单个任意字符{n..m}
:在shell中通配符不直接支持,但在某些上下文中(如for循环)表示范围