我有一个字符串说
string="MYSTRING"
现在我想grep出现任何"MYSTRING"
(带双引号),以便在启动时必须有括号,基本上我想搜索,其中"MYSTRING"
位用作函数的参数。所以,
foo( "MYSTRING" //postive
foo("MYSTRING" //positive
foo('MYSTRING' //positive
foo( 'MYSTRING' //positive
var a = "MYSTRING" //negative
我用过:
string="MYSTRING"
regexstring="[(]*\"$string\""
grep -e "$regexString" <<'EOF'
foo( "MYSTRING" //postive
foo("MYSTRING" //positive
foo('MYSTRING' //positive
foo( 'MYSTRING' //positive
var a = "MYSTRING" //negative
EOF
理想情况下,所有在其旁边都有“正面”且没有“负面”项目的项目会匹配。需要改变什么来实现这一目标?
答案 0 :(得分:1)
执行此操作的简单方法是使用ksh扩展名(由bash采用)$''
来提供可包含反引号的文字字符串。
#!/usr/bin/env bash
string=MYSTRING
regexstring=$'[(][[:space:]]*[\'"]'"$string"$'[\'"]'
grep -e "$regexstring" "$@"
分解这项任务:
$'[(][[:space:]]*[\'"]'
...是一个字符串文字,其计算结果如下:
[(][[:space:]]*['"]
...因此,它匹配单个(
,后跟零个或多个空格,后跟'
或"
。
它的第二部分是双引号扩展,"$string"
;这应该是相当直接的。
最后一部分是$'[\'"']'
;与第一部分一样,$''
string-literal语法用于生成可以包含'
和"
作为内容的字符串。
顺便说一句 - 在POSIX sh中,这可能看起来像:
regexstring='[(][[:space:]]*['"'"'"]'"$string""['"'"]'
在那里,我们使用单引号字符串来保存文字双引号,并使用双引号字符串来保存文字单引号。