Bash 字母之间有多个空格和点

Bash 字母之间有多个空格和点,bash,sed,filter,Bash,Sed,Filter,目前,我正在写一个脚本来阅读一些日志,我开始在其中添加一些过滤器,其中一个过滤器用来查找脏话,我被卡住了 因此,这一部分正在发挥作用: 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')
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”

因此,输出将是: 我恨你 (粗体部分已上色)


它不应该返回任何其他行。

我认为您正在尝试这样做

$ 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

目前,您有:

$ echo "g *t *f *o" | sed 's/ /[[:space:]]/g'
g[[:space:]]*t[[:space:]]*f[[:space:]]*o
这将
gtfo
与字母之间的任意数量的空格相匹配。要匹配字母之间任意数量的空格或句点,请执行以下操作:

$ 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“g*t*f*o”
只返回
g*t*f*o
。@Avinash Raj我看到你的名声,你显然比我有更多的知识。正如我所看到的,我将回音字符串通过管道传输到sed,并根据输出将空白替换为[[:space:]\.]。那么,我的想法哪里出了问题呢?替换部分中的
[[[:space:]\\.]
将空格替换为
[[[:space:]\\.]
,给我们一个预期输出的示例。要用什么替换多个空格或点吗?我用我期望的输出编辑帖子。
$ echo "I hate you g....t  ..f . o" | egrep --color='always' -iw $SWEARS
I hate you g....t  ..f . o