grep:文件过滤工具
sed:流编辑器,操作、过滤、转换文件内容
awk:Linux的文本报告生成器(格式化文本)
^$ | 代表空行(起始符 后面跟着 结束符) |
. | 代表任意一个且只有一个字符 |
.* | 匹配所有内容 |
[^abc] | 与[abc]相反,匹配除a或b或c外的 任意字符 |
? | 匹配前面一个字符0次 或 1次 |
a{n,m} | 匹配前一个字符最少n次,最多m次 |
Linux grep 命令
grep [options] [pattern] file
-i: ignorecase,忽略字符的大小写
-o: 仅显示匹配到的字符串本身
-v: --invert-match 显示不能被模式匹配到的行
-E: 支持使用扩展的正则表达式元字符
-q: --quiet, --silent 静默模式,即不输出任何信息
-c: 只统计匹配的行数
--color=auto: 为grep过滤结果添加颜色
-n: 显示所在的行号
grep '^ a' text.txt -i -v | grep '^$' -v
#去除以a或A开头的行或空行
grep -E 'g(oo|la)d' text.txt -c
#统计 包括good或glad的 行数
Linux sed 命令
sed [options] [sed内置命令字符] file
选项:
-n: --quiet或--silent,仅显示script处理后的结果,常与sed内置命令p一起用
-i: 直接将修改结果写入文件,(不用-i,修改的是内存数据)
-e: 多次编辑,不需要管道符
-r: 支持正则扩展
sed内置命令字符:
a: append,对文本追加,在指定行后添加一行/多行文本
d: Delete,删除匹配行
i: insert,表示插入文本,在指定行前添加一行/多行文本
p: print,打印匹配行的内容,通常p与-n一起用
s/正则表达式/替换内容/g:匹配正则内容,然后替换内容。结尾g代表全局匹配
sed匹配范围:
空地址:全文处理
范围区间:10,20p 十行到二十行 , /pattern1/,/pattern2/
步长: 1~2,表示1、3、5、7...行 2~2,表示2、4、6、8...行
sed "2,5p" text.txt -n
#筛选第2行到第5行的数据 (-n)只显示找到的部分
sed "2,5d" text.txt -i
#删除第2行到第5行的数据,(-i)并写回文件
sed "2a some_need_appended_words" text.txt -i
#在第2行后添加文字some_need_appended_words,(-i)并写回文件
sed "2c some_need_replaced_words" text.txt -i
#在第2行替换为文字some_need_replaced_words,(-i)并写回文件
搜索:
sed -n '/oo/p' text.txt 数据的搜寻并显示
sed -n '/oo/d' text.txt 数据的搜寻并删除
sed -n '/oo/{s/oo/kk/;p;q}' text.txt 数据的搜寻并执行命令
数据的查找与替换
sed 's/要被取代的字串/新的字串/g' text.txt
Linux awk 命令
awk [选项参数] 'script' var=value file(s) 或 awk [选项参数] -f scriptfile var=value file(s)
把行的信息按照特定的分隔符进行分割,然后按照pattern进行对应的action。
awk '{[pattern] action}' {filenames} # 行匹配语句 awk '' 只能用单引号
$n | 当前记录的第n个字段,字段间由FS分隔 |
$0 | 完整的输入记录 |
NF | 一条记录的字段的数目 |
NR | 已经读出的记录数,就是行号,从1开始 |
# 每行按空格或TAB分割,输出文本中的1、4项
$ awk '{print $1,$4}' log.txt
# 格式化输出(如 宽度为几个字节)
$ awk '{printf "%-8s %-10s\n",$1,$4}' log.txt
# 输出第二列包含 "th",并打印第二列与第四列
$ awk '$2 ~ /th/ {print $2,$4}' log.txt
# 过滤第一列大于2并且第二列等于'Are'的行
$ awk '$1>2 && $2=="Are" {print $1,$2,$3}' log.txt #命令
echo "input start number:"
read start_number
#
for file in `ls`;
do
if [ "${file:21:3}" = "tar" ] && [ "${start_number}" -lt ${file:8:3} ] ;
then
c=${file:8:3};echo ${c};
mkdir ${file:8:3}
tar -xzf ${file} -C ${file:8:3};
grep MessageType ./${c}/*
fi;
done