我想用grep搜索一个字符串,如下所示:
something ~* 'bla'
字符串我试过了,但是shell删除了单引号。啊...
grep -i '"something ~* '[:alnum:]'"' /var/log/syslog
型正确的搜索是什么?
dy2hfwbg1#
如果你需要在引号中寻找引号,有一些丑陋的结构可以做到。
echo 'And I said, "he said WHAT?"'
字符串按预期工作,但对于另一个嵌套级别,以下不按预期工作:
echo 'She said, "And I said, \'he said WHAT?\'"'
型相反,你需要转义单引号字符串的内部单引号 * 外部 *:
echo 'She said, "And I said, '\''he said WHAT?'\''"'
型或者,如果你喜欢:
echo 'She said, "And I said, '"'"'he said WHAT?'"'"'"'
型它不漂亮,但它有效:)当然,如果你把事情放在变量中,所有这些都是没有意义的。
[ghoti@pc ~]$ i_said="he said WHAT?" [ghoti@pc ~]$ she_said="And I said, '$i_said'" [ghoti@pc ~]$ printf 'She said: "%s"\n' "$she_said" She said: "And I said, 'he said WHAT?'" [ghoti@pc ~]$
型:-)
nwo49xxi2#
grep -i "something ~\* '[[:alnum:]]*'" /var/log/syslog
字符串对我来说没问题
*
~*将匹配~的零次或多次出现,~\*匹配something之后的表达式~*
~*
~
~\*
something
:alnum:
[[:alnum::]]
3zwtqj6y3#
[[:alnum:]]
[[:alnum:]]*
" "
字符串
2ic8powd4#
看起来,根据你的表达式,你首先使用',然后使用"。如果你想转义单引号,你可以使用'并转义它们,或者使用双引号。此外,正如Matteo注解,字符类有双方括号。要么:
'
"
grep -i "something \~\* '[[:alnum:]]+'" /var/log/syslog
字符串或
grep -i 'something ~* \'[[:alnum:]]+\'' /var/log/syslog
型
4条答案
按热度按时间dy2hfwbg1#
如果你需要在引号中寻找引号,有一些丑陋的结构可以做到。
字符串
按预期工作,但对于另一个嵌套级别,以下不按预期工作:
型
相反,你需要转义单引号字符串的内部单引号 * 外部 *:
型
或者,如果你喜欢:
型
它不漂亮,但它有效:)
当然,如果你把事情放在变量中,所有这些都是没有意义的。
型
:-)
nwo49xxi2#
字符串
对我来说没问题
*
以匹配文字*
,而不是使其成为零或多匹配字符:~*
将匹配~
的零次或多次出现,~\*
匹配something
之后的表达式~*
:alnum:
周围使用双括号(参见示例here)[[:alnum::]]
之后使用*
不仅可以匹配单引号之间的一个字符,还可以匹配多个单引号之间的字符3zwtqj6y3#
[[:alnum:]]
(两个括号)指定[[:alnum:]]
只匹配一个字符。要匹配零个或多个字符[[:alnum:]]*
" "
来引用正则表达式:字符串
2ic8powd4#
看起来,根据你的表达式,你首先使用
'
,然后使用"
。如果你想转义单引号,你可以使用'
并转义它们,或者使用双引号。此外,正如Matteo注解,字符类有双方括号。要么:字符串
或
型