今天做项目时,遇到了一个问题,就是如何在linux命令下使用管道,简单的管道大家肯定都会,就像这种形式
<span style="font-size:18px;">ls -a | grep *test</span>
今天遇到的问题有点复杂,就是实时扫描系统日志,从上次扫描后的一行之后一直到文件结尾,匹配关键字,如果匹配则报警。我采用awk配合grep命令来实现
awk命令作为选取日志段输出作为grep命令的输入
awk 'NR>= beginLineNum&& NR<endLineNum logFileName | grep -nE pattern ;
但是如何取到当前日志的总行数就成为了问题,取总行数的命令为
wc -l logFileName
但是wc之后的结果是要放在恩德LineNum这个位置的,用|方式是实现不了的,经过查询之后,发现可以使用``符号来实现(`符号是键盘上esc键下边的那个键)
所以实现的方式是
awk 'NR>= beginLineNum&& NR<`wc -l logfileName` logFileName | grep -nE pattern ;
在linux执行命令时,会首先执行``内的命令,之后在去执行其他命令,并将
``内的命令的返回值作为标准输入,输入到外边的这个命令中。