当文本行出现在文件中时,如何使用Bash进行操作
时间:2020-03-06 14:58:19 来源:igfitidea点击:
我想在日志文件中出现某些文本后立即运行命令。我该如何在Bash中做到这一点?
解决方案
使用命令
tail -f file.log | grep --line-buffered "my pattern" | while read line do echo $line done
" --line-buffered"是这里的关键,否则读取将失败。
即使没有GNU grep,这也应该起作用:
tail -f -n 0 logfile.out | nawk '/pattern/ {system("echo do something here")}'
编辑:添加了" -n 0",以便仅新出现的文本将被匹配。
仅使用tail
:
tail -f file.log | while read line; do if [[ $line == *text* ]]; then mycommand fi; done
我喜欢马特里的回答。 Bruno De Fraine的回答也很好,因为它仅使用shell ccommands,而不使用其他程序(如awk)。遭受这样的问题,即整行必须匹配魔术字符串。从这个问题尚不清楚这是要求的一部分。
我将对其进行一点修改以处理原始问题中的"尽快"子句
logfile_generator | tee logfile.out | nawk '/pattern/ {system("echo do something here")}'
其中logfile_generator是首先生成日志文件的程序。一旦找到了魔力弦,这种修改就会执行"某事"。
另外,我们可能会看到inotail
,它是tail -f
的替代品,它使用inotify
框架仅在我们感兴趣的文件更改时才唤醒。通常的" tail -f"在两次轮询之间只睡了很短的时间,这是一种有效的方法,但不是很有效的解决方案。