linux过滤字符串命令

截取文本内容:

 ACT:heartbeat;TIMESTAMP:1556084456;STATIONID:172692;STATUS:0;
 ACT:heartbeat;TIMESTAMP:1556084456;STATIONID:172692;STATUS:0;ORDERLIST:||0,||0,||0,||0,||0,;

 

1、从一段文本中过滤不包含某些字符串的命令:

tailf   file |grep  -v  '不包含的字符串'

2.1、使用awk从一段文本中只截取几个字符过滤出来显示命令:

这段的意思是从心跳里过滤出不包含ORDERLIST的所有文本,同时从过滤出来的文本里以分号作为分隔符  只显示含有STATIONID的那列。

tailf heartbeat.txt|grep 'ACT:heartbeat;' |grep -v 'ORDERLIST' |awk -F ";" '{if($3~/^STATIONID/) print $3}'

awk命令介绍:

awk基本语法为:awk [-F] "field-operator" 'comand' inputfiles,-F和field-operator一起使用,field-operator是域分隔符,如果不使用-F选项,则默认的域分隔符为空格。后面command命令一般需要用一堆“{}”括起来,然后进行必要的操作,比较全面一点的command命令'{if($1~/^A/) print $1}',翻译一下这个命令就是,如果第一列($1)里面有匹配(~)正则表达式(/^A/)的话,那么就输出(print)到标准输出。需要注意的是,条件必须要用一堆"()"括起来,正则表达式需要用“//”括起来。当然,完全可以不要条件匹配,可以直接输出指定列,如'{print $1}'

 

2.2、使用cut从一段文本中只截取几个字符过滤出来显示命令:

tailf heartbeat.txt|grep 'ACT:heartbeat;' |grep -v 'ORDERLIST' |cut -d ";" -f 3

-d ";"  表示以分号为分隔符。

-f  1    表示取分割后的一个域。 

3、cut另一个字符截取用法,可以结合按域分割后截取想要的字符:

echo "hello" |cut  -c  2    ---->会输出e

echo "hello" |cut  -c  2,3    ---->会输出el

echo "hello" |cut  -c  2-   ---->会输出ello

 

 

你可能感兴趣的:(linux)