转义正则表达式活动字符
Escaping regex-active characters
var="int foo(float y, bool k)"
awk -v start="$var" '
[=10=] ~ start ,[=10=] ~ /}/{
print
if([=10=] ~ start ){ startLine=FNR }
if([=10=]~/}/){
print "The content is between lines " startLine " and " FNR
exit
}
}' $file
我想在文件中搜索一个字符串,但由于该字符串包含括号,它会将它们识别为运算符而不是字符。我试过这个
var="int foo\(float y, bool k\)"
它确实解决了这个问题,但我的 var 并不总是相同的,所以在那种情况下我需要一些在括号前添加反斜杠的代码。还有其他解决办法吗?
改用index
。
index([=10=], start)
根据您显示的示例,您能否尝试以下操作。在 '...'
(单引号)内引用您的 shell 变量,使字符包含在文字字符中。此外,我在这里更改了方法并使用 index
而不是使用 awk
的范围方法,这更适合这种情况。
start='int foo(float y, bool k)'
awk -v start="$start" '
index([=10=],start){
found=1
startLine=FNR
}
found{
val=(val?val ORS:"")[=10=]
}
[=10=] ~ /}/{
if(val){ print val }
print "The content is between lines " startLine " and " FNR
exit
}' Input_file
var="int foo(float y, bool k)"
awk -v start="$var" '
[=10=] ~ start ,[=10=] ~ /}/{
print
if([=10=] ~ start ){ startLine=FNR }
if([=10=]~/}/){
print "The content is between lines " startLine " and " FNR
exit
}
}' $file
我想在文件中搜索一个字符串,但由于该字符串包含括号,它会将它们识别为运算符而不是字符。我试过这个
var="int foo\(float y, bool k\)"
它确实解决了这个问题,但我的 var 并不总是相同的,所以在那种情况下我需要一些在括号前添加反斜杠的代码。还有其他解决办法吗?
改用index
。
index([=10=], start)
根据您显示的示例,您能否尝试以下操作。在 '...'
(单引号)内引用您的 shell 变量,使字符包含在文字字符中。此外,我在这里更改了方法并使用 index
而不是使用 awk
的范围方法,这更适合这种情况。
start='int foo(float y, bool k)'
awk -v start="$start" '
index([=10=],start){
found=1
startLine=FNR
}
found{
val=(val?val ORS:"")[=10=]
}
[=10=] ~ /}/{
if(val){ print val }
print "The content is between lines " startLine " and " FNR
exit
}' Input_file