插入 '。' 在grep的正则表达式中的所有字符,并使用管道之间的grep(in

2019-10-23 11:48发布

我想插入'.' 在一个给定的输入字符串的每一个字符,然后之间使用它作为参数在一管

我做下列之一:

tail -f file.txt | grep -a 'R.e.s.u.l.t.'
tail -f file.txt | awk '/R.e.s.u.l.t./'

如何可以只键入'Result'和它传递作为正则表达式参数grep接收从由创建的缓冲器输入时tail -f通过使用附加bash默认功能

Answer 1:

tail -f file.txt | grep -a -e "$(echo Result | sed 's/./&./g')"

这呼应了词Result作为输入sed (考虑下面的字符串代替),其替换本身每个字符后跟一个. ,然后输出被用作用于搜索表达式grep 。 该-e如果你想搜索可以保护你免受事故-argument与点,例如。 如果字符串是一个变量,那么你会使用双引号解决这个问题,太:

result="Several Words"
tail -f file.txt | grep -a -e "$(echo "$result" | sed 's/./&./g')"


Answer 2:

awk的版本:

tail -f file.txt | 
awk -v word="Result" '
    BEGIN {gsub(/./, "&.", word); sub(/\.$/, "", word)} 
    $0 ~ word
'


文章来源: insert '.' between all characters in grep regex and use in piped grep