目前我正在编写一个脚本来为我读取一些日志,我开始为它添加一些过滤器,因为它们是一个过滤器,可以找到发誓的话语而且我会被卡住。
所以这部分正在发挥作用:
SWEARS=$(echo "g *t *f *o" | sed 's/ /[[:space:]]/g')
cat $LOGFILE | egrep --color='always' -iw $SWEARS
这里会找到人们会坐在哪里' gtfo'无论他们在字母之间放置多少空格。请忽略我必须写' *'在现在每封信之间。
现在,如果人们写g.t.f.o,它将找不到任何东西。 我想出的是
SWEARS=$(echo "g *t *f *o" | sed 's/ /[[[:space:]]|\\.]/g')
但这似乎不起作用。有人可以帮助我,并向我解释为什么它不起作用?
编辑: 让我们假设日志文件有很多行,其中一行是:"我讨厌你g.t..f o" 我希望它找到' g.t..f o'
所以输出将是: 我讨厌你 g.t..f o (大胆的颜色)
它不应该返回任何其他行。
答案 0 :(得分:0)
我认为你正试图这样做,
$ echo "I hate you g.t..f o" | grep -E '\b[A-Za-z]([ .]+[A-Za-z]\b)+'
I hate you g.t..f o
这会以红色显示g.t..f o
。
答案 1 :(得分:0)
目前,你有这个:
$ echo "g *t *f *o" | sed 's/ /[[:space:]]/g'
g[[:space:]]*t[[:space:]]*f[[:space:]]*o
这匹配g t f o
与字母之间的任意数量的空格。要匹配字母之间的任意数量的空格或句点:
$ echo "g *t *f *o" | sed 's/ /[[:space:].]/g'
g[[:space:].]*t[[:space:].]*f[[:space:].]*o
将此应用于您的样本输入:
$ SWEARS=$(echo "g *t *f *o" | sed 's/ /[[:space:].]/g')
$ echo "I hate you g.t..f o" | egrep --color='always' -iw $SWEARS
I hate you g.t..f o
或者,
$ echo "I hate you g....t ..f . o" | egrep --color='always' -iw $SWEARS
I hate you g....t ..f . o