「Linux」:sed, awk, grep, & ...
「Linux」工具的使用
流编辑器——sed
工作流
- 读取: sed 从输入流(文件,管道或者标准输入)中读取一行并且存储到一个叫作 模式空间(pattern buffer) 的内部缓冲区
- 执行:默认下,sed 命令在模式空间顺序执行(未指定行时,对所有的行执行)
- 显示:将写改后的内容发送到输出流,模式空间清空
默认情况下,在模式空间执行命令,输入文件不会发生变化
存在一个持久存储的缓冲区 保持空间(hold buffer),可以用来临时保存内容
基础语法
总体结构:
sed [OPTION]... {script-only-if-no-other-script} [input-file]...
sed [-n] [-e] 'script(s)' files
sed [-n] -f scriptfile files
OPTIONS
-n
:--quite
,不打印模式空间的内容除非-p
-e SCRIPT
:--expression=SCRIPT
指定执行脚本-f SCRIPT-FILE
:--file=SCRIPT-FILE
指定执行的脚本文件-i[SUFFIX]
:--in-place[=SUFFIX]
就地编辑,并以 SUFFIX 为后缀备份原文件--follow-symlinks
:处理符号链接-E
:-r
或--regexp-extended
使用拓展正则(默认是基础正则)-s
:--separate
合并输出的多个文件为一个流
sed command
总体结构
[addr]X[options]
addr
可选的标识行的地址,如行号、正则、范围
3
第三行3,7
第 3-7 行/^##/
以##
开头的行/X$/
以X
结尾的行$
最后一行
X[options]
是一个动作及其选项,只对 addr
匹配的行进行处理
a [opts]
在当前行下方新增内容p
打印模式空间的行d
删除c [opts]
取代i [opts]
在当前行的上方插入内容s [opts]
使用正则替换opts <- /REGEXP/REPLACEMENT/[FLAGS]
REGEXP
正则表达式,匹配的内容会被REPLACEMENT
替换REPLACEMENT
- string 直接替换
\N
引用匹配分组的内容N <- [0..9]
&
引用整个匹配内容\L
|\l
将后面的内容转为小写,直到遇到\U
或\E
结束 |\l
只转换第一个字符\U
|\u
将后面的内容转为大写,直到遇到\L
或\E
结束 |\u
只转换第一个字符\E
结束\L \U
的转换
FLAGS
g
全局替换p
打印=
打印行号
y [opts]
转换opts <- /src/dst
q [opts]
退出,opts
时返回值
循环
分支
保持空间
示例
# 在所有非 # 开头的行加上 #
sed -r 's/^([^#])/#\1/'
# 输出文件行数
sed -n -e '$='
# 移除空行
sed '/^$/d'
# 删除连续行
sed '/./,/^$/!d'
参考资料: sed 完全教程 三十分钟学会 sed
文本处理工具——awk
awk 这个名字来源于它的三个开发者的姓名首字母
一般来讲,Linux 上使用的是 GNU awk 即 gawk
基础语法
awk [options] '[Pattern]{Action}' /path/to/file1 [path/to/file2]
xxx | awk [opts] '[Pattern]{Action}'
举例
ll | awk '{print $NF}'
ll | awk '{print $0}'
ll | awk '{print $3}'