[面试用] awk grep sed命令

2020-10-07  本文已影响0人  再凌

管道符后面可以先xargs, 将Tab和回车换成空格, 字符串分割成参数再交给其他的grep/awk/sed处理:
xargs命令可以通过管道接受字符串,并将接收到的字符串通过空格分割成许多参数(默认情况下是通过空格分割) 然后将参数传递给其后面的命令,作为后面命令的命令行参数
如:

cat 1.txt | xargs grep 2020
cat 1.txt | cat # 输出1.txt, 因为cat把字符串整体处理依旧当成字符串

sed

sed更适用于修改文本内容

查询

sed + file会直接输出文件的全部内容

sed -n +file -n参数指定了只打印符合后面要求的行

sed -n 'xxxxxp' file 单引号' '里面放的是要匹配的内容, 注意最后有一个p, 代表要将匹配内容打印出来, 有两种类型

sed -n '1p' file.txt # 打印第一行的内容

sed -n '1,5p' file.txt # 打印1~5行的内容

sed -n '/info/p' file.txt # 打印有"info"的行

sed -n '/info/, /warning/' file.txt # 打印有info或者warning的行

sed -n ' /info/, 5' file.txt # 打印有info的行, 直到第五行

sed -n '1,5!p' file.txt # 打印!(1~5)行的内容, 注意!将它前面的内容取反

"p"选项还有其他的, 如=可以打印行号, 如果有多个选项, 那么需要用{}包括, 并且每一个选项后面有分号, 如{=;p;}

-r模式支持正则表达式, 可以参考cnblog的文档

增删改

必须使用-e模式来启用动作, 如果后面直接接文件就是在源文件上修改

名称 动作 说明
a 新增 sed -e 4a\newLine testfile 第四行后面新加一行, 并写上newLine, 结果放到stdout中
d 删除 sed '2,5d' 删除2~5行打印
i 插入
p 打印
c/s 取代
sed -n '/root/{s/bash/blueshell/;p;q}'  # 找到root所在的行, 把bash替换成blueshell, 显示并退出
sed -i '$a # This is a test' regular_express.txt # $代表最后一行, a代表追加

参考runoob

grep

-r 递归查找某一个文件夹而不是某一个文件
-v "逆反", 寻找不含指定字符串的行
-e 开启正则表达式(注意和sed的-r不同)

awk

awk更适用于格式化文本, 复杂处理

格式: awk '操作行为' filename

操作行为

操作行为是每行执行一次

print 打印, 包括双引号的字符串常量, $n代表的元素或者自定义的变量, print不同的东西用逗号隔开

awk 'print $1, $3' myfile.txt
$

分隔符是可以自定义的, 通过-F 参数可以指定, 甚至可以有多个分隔符

awk内置的变量也可以输出或者修改


内置变量

可以指定在循环开始前BEGIN或者结束后END的代码, 所有的代码都放在单引号中, 但是不同的花括号中

awk '{count++;print $0;} END{print "user count is ",count}' passwd
# 在统计每一行之后, 输出总用户数量

awk还支持C语言的常见结构, 如if, while等. 还支持关联数组(map)

awk还有内置函数, 和c语言的string函数类似, split(原, 目的数组, 分割字符), substr() 等

参考资料

find

find --name myfile.txt

上一篇 下一篇

猜你喜欢

热点阅读