grep -v '^$' xx.txt 排除空行
egrep 或者 grep -E 是一个意思,都表示拓展正则
egrep -o '[abc]+' xx.txt 其中-o表示只打印匹配到的内容
egrep -w 'abc' xx.txt 单词模式,只匹配拥有完整单词的行
egrep -n 'abc' xx.txt 匹配含有abc的行,-n显示行号
egrep -c 'abc' xx.txt 匹配含有abc的行,-c显示匹配到的有几行
其他,可以参考:Linux grep/egrep命令详解_grep -e_镜花水月-李的博客-CSDN博客
[^abc] 正则里一旦中括号出先^则代表排除的意思,所以这里的正则就是说排除abc以外的字符
sed -n "3p" xx.txt 打印xx.txt文件里的第三行,-n的意思是,不将模式空间里的数据流打印到terminal,
sed -nr '/[0-9]+/p' 注意 sed默认不支持正则的拓展模式, 所以在使用 + 这种正则符号的时候,需要加 -r
sed -nr "3d" xx.txt 这里p是打印,那么d就是删除了,跟p的用法完全相同
sed -nr '/^$|#/!p' xxx.txt 遇到空行或带#的行,不打印。!代表取反,不的意思。
sed -r 's#(.*)#<\1>#g' xxx.txt 将每一行的内容左右加上<>.其中的()就是正则里组的意思,叫先保护再使用
sed -inr '/.*abc.*/s#.*#aa#' test2 一定记住,加了-i参数,就是真的把源文件改了,否则就只是预览模式,随便搞
awk -F, 'BEGIN{print "hahaha"}{print $2}END{print "结束啦"}' xx.txt 这是awk的标准模式,读取文件之前干啥,读取文件干啥,读完文件干啥,
-F指定分割列时用的分割符
awk 'NR>=1 && NR<=5' xx.txt 打印1-5行,NR是number of record 行号的意思
column -t 将列显示的好看点,对齐
awk '{print $1,$NF}' xxx.txt 打印第一列和最后一列。NF是number of field 总列数的意思
awk -F: -v OFS '{print $1,$2}' xxx.txt 将:作为列的分割符,并最后输出 -F== -v FS , -v OFS F: Field S: separator O: output
awk -F: '$3~/^1/' xx.txt 文件中第三列中包含以1为开头的东西。 ~ 代表包含,!~代表不包含
awk '/11:02:00/,/11.05.00/{print $1}' xx.txt 显示11:02:00到11.05.00这个时间段的数据的第一列
seq 100 | awk 'BEGIN{i=0}{i+=1}END{print i}' awk的计数模式,如果i的初始值默认就是0,所以,如果定义的值为0,也可不定义
seq 100 | awk 'BEGIN{i=20}{i+=1}END{print i}' 定义初始值为i=20
seq 100 | awk 'BEGIN{sum=0}{sum+=$1}END{print sum}' 求和模式,同样sum的默认值为0,所以这里也可不定义begin
seq 100 | awk 'BEGIN{sum=0}{sum+=$1;print sum}END{print sum}' 多了个print可以打印加和的过程,这里一定注意,中间的花括号里,一定用的是 :而不是','
seq 100 | awk 'BEGIN{sum=0;a=1}{sum+=$1;print sum}END{print sum, a}' 注意语句,一个语句内是','分隔,多个语句是';'分隔
awk 'BEGIN{a[0]=1;a[1]="ymk"; for (i in a) print i, a[i]}' 这里的for语句是awk专用的,for里取的是数组下标
awk -F"[/]" '{a[$3]++}END{for (i in a) print i,a[i]}' test2 这里 a[]++ 就是用来搞统计的,[]里填要统计的列
awk -F"[/]" '{a[$3]++}END{for (i in a) print i,a[i]}' test2 | sort -rnk2 顺便排序,-r是逆序,n是数字,k代表列,2就是第二列
echo you are aaaaacd a good baby bbbbbb. | awk -F"[ \.]" '{for (i=1;i<=NF;i++) if (length($i)<4) print $i}'