如何在 Bash/Grep 中转义单引号?
- 2024-10-14 08:39:00
- admin 原创
- 70
问题描述:
我想用 grep 搜索如下字符串:
something ~* 'bla'
我尝试了这个,但是 shell 删除了单引号。啊……
grep -i '"something ~* '[:alnum:]'"' /var/log/syslog
正确的搜索是什么?
解决方案 1:
如果您确实需要在引号中的引号中寻找引号,那么有一些丑陋的构造可以做到这一点。
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"
' "$she_said"
She said: "And I said, 'he said WHAT?'"
[ghoti@pc ~]$
:-)
解决方案 2:
grep -i "something ~* '[[:alnum:]]*'" /var/log/syslog
对我有用。
转义第一个
*
以匹配文字,*
而不是使其成为零或多个匹配字符:
~*
将匹配零个或多个匹配,~
而匹配后面的
~*
表达式~*
`something`
使用双括号(参见此处的
:alnum:
示例)使用
*
after[[:alnum::]]
不仅可以匹配单引号之间的一个字符,还可以匹配其中的几个字符单引号根本不需要转义,因为它们包含在受双引号限制的表达式中。
解决方案 3:
[[:alnum:]]
字符类用(两个括号)指定[[:alnum:]]
仅匹配一个字符。要匹配零个或多个字符[[:alnum:]]*
您只需引用
" "
正则表达式即可:
grep -i "something ~* '[[:alnum:]]*'" /var/log/syslog
解决方案 4:
根据您的表达,您似乎首先使用'
,然后使用"
。 如果要转义单引号,可以使用'
并转义它们,也可以使用双引号。 此外,正如Matteo 评论的那样,字符类有双方括号。 要么:
grep -i "something ~* '[[:alnum:]]+'" /var/log/syslog
或者
grep -i 'something ~* \'[[:alnum:]]+\'' /var/log/syslog
相关推荐
热门文章
项目管理软件有哪些?
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理必备:盘点2024年13款好用的项目管理软件
热门标签
云禅道AD