转义正则表达式活动字符

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