Linux 操作文本的三大利器分别是 grep、sed 、awk,简称三剑客。
大师兄 awk:最擅长取列;二师兄 sed:最擅长取行;三师兄 grep:最擅长过滤。
awk [options] 'script' file1 file2, ...
awk [options] 'PATTERN {acticon}' file1 file2, ...
格式说明:
$0 代表整行,$1 代表第 1 段,$2 代表第 2 段,以此类推,$NF 代表最后一个字段,多个字段直接用逗号隔开
awk '{print $1, $2}' xxx.log
打印操作支持拼接打印,如:awk '{print "first" $1, $2}' xxx.log
4. options 参数:输入分隔符,默认以空白字符分隔,通过 -F 选项来执行分隔符
awk -F '#' '{print $1,$2}' test
输出分隔符,默认情况下输出分隔符是空格,使用内置变量 OFS 来设定输出分隔符,需要加上 -v 选项
awk -v OFS="-->" '{print $1,$2}' test
5. awk 变量
FS:输入字段分隔符,默认空白字符,一般需要加 -F
OFS:输出字段分隔符,默认是空格,一般需要加 -v
NF:分隔后的字段数量
NR:当前行的行号
6. pattern 模式:模式是条件,符合条件的行, awk 才会进行处理
关系运算模式:awk -F '#' 'NF==5 {print $1}' test
如果行的分段数量为5 的话,进行打印操作,其他的类似,如 NF>2,NF<4,$1==1234 等都是判断条件
awk -F '#' 'NF>=4 && NF<=5 {print $1}' test
二师兄 -- sed
sed [options]... 'script' inputfile
选项
script 地址定界
#:指定的行; $:最后一行
/pattern/:被此处模式所能够匹配到的每一行
编辑命令
替换标记:
实例说明:
sed -n 2p test 打印第 2 行内容
sed -n 2,5p test 打印第 2--5 行内容
sed -i 's/a/v/g' test 将文件中的 a 全部替换为 v 「sed替换格式是:sed -i ‘s/要替换的内容/替换成的内容/g' 文件名」
三师兄 -- grep
grep 【option】 pattern 【file】
option:
实例说明:
grep -i 'b' test 在文件 test 中查找字符 b
mac 上执行上述命令会报错 sed: 1: "test": undefined label 'est.txt'
解决方案:增加一个备份的追加名【sed -i '.bak' 's/a/v/g' test】
原因:mac强制要求备份,否则报错
当然可以不使用其他备份名字,只是用'',就可以只保留一份
sed -i '' 's/a/v/g' test
grep -q 'abc' test 静默执行。不会输出任何信息,如果命令运行成功返回0,失败则返回非0值。一般用于条件测试
grep -n 'v' test 查找包含字符 v 的行数
grep -nv 'v' test 查找不包含字符 v 的行数
grep -n v$ test 查找以 v 结尾的行
grep -v 'v' test 反向查找
grep 'ljl' -A 2 test 输出匹配结果行的后 2 行
grep 'wooow' -B 2 test 输出匹配结果行的前 2 行
grep 'wooow' -C 2 test 输出匹配结果行的前后 2 行
grep -n 'abc' test1 test2 test3 或 grep -n 'abc' test* 多个文件查找匹配的结果行
全部评论