grep文本搜集工具
-c : 只输出匹配的行
-I : 不区分大小写,默认是忽略大小写的
-n : 显示匹配的行号及行
-v : 显示不包含匹配文本的所有行(我经常用除去grep本身)
grep '支持正则表达式' text.txt
sed以行为单位的文本编辑工具 sed可以直接修改档案
sed -n '1d' abc-------- sed '1d' abc
-n : 安静模式,什么内容也不显示, 因为经过sed处理的行, 是个删除操作, 所以不显示--------显示删除后的所有行
d:是删除行的指令
sed -e '1,5d' -e 's/abc/xxx/g' filename
-e : 多重编辑。
s/old/new/g:是替换字符串的命令
sed '/test/a xx' abc
将xx 追加到所有的带 test 行的下一行
sed '/test/c xx' abc
将xx 替换所有带 test 的行
i 插入, 后面的字符串, 会在上一行出现
p 打印, 将选择的资料列出, 通常和 sed -n 一起运作 sed -n '3p' 只打印第3行
sed -n '/m/w qqq' abc
从abc中读取带m的行写到qqq文件中, 注意, 这个写入带有覆盖性.
awk 一行一行的分析处理
格式如下:
awk '条件类型1{动作1}条件类型2{动作2}'filename
awk '{print $1}' text.txt
对text.txt的内容一行一行按空格分割,默认就是空格,而且连续多个空格看作一个。打印出所有行的第一个内容
print 后面的参数 $0代表整行,$2代表分割的第二个内容......,NF: 每一行处理的字段数, NR 目前处理到第几行, FS 目前的分隔符, $NF是输出最后一个字段的值
{FS=":" }指定以此分隔符分割
awk 'END{print $1}' text.txt
BEGIN和END命令,一个是awk之前,一个是awk之后执行。这里就可以深入了解到print和awk的原理。awk是行处理单位,因此,print的操作是每处理完一行后执行的操作,因此有多少行打印多少。如果加上开始或者结束标记的话,开始前是空,结尾是最后一行处理的值。
awk '/test/ {print NR}' text.txt
/ / 双斜线中间是正则表达式,这句是将含有test字符串的行号打印出来。
awk -F: '$3>=500{print $1,$3}'/etc/passwd
''引号中间支持表达式计算
awk -F: '$7~"bash$"{print $1,$7}'
~和!~使用到模式匹配,!代表不匹配
awk -F:-v sum=0 '{if ($3>=500)sum++}END{print sum}' /etc/passwd
{}里面可以使用判断好循环表达式,这里利用了:分隔符,定义sum变量,最后输出sum的值
for(iin name) print name[i]}
for循环的特殊之处在于,i是name的下标而非像python中的每个元素