正在转义regex活动字符


var="int foo(float y, bool k)"
awk -v start="$var" '
$0 ~ start ,$0 ~ /}/{
print
if($0 ~ start ){ startLine=FNR }
if($0~/}/){ 
print "The content is between lines " startLine " and " FNR
exit
}
}' $file

我想在文件中搜索字符串,但由于字符串包含括号,它将它们识别为运算符而不是字符。我试过这个

var="int foo(float y, bool k)"

它确实解决了这个问题,但我的var并不总是一样的,所以在这种情况下,我需要一些在括号前添加反斜杠的代码。还有其他解决方案吗?

请改用index

index($0, start)

根据您显示的示例,您可以尝试以下操作吗。在'...'中引用shell变量(单引号(,使字符位于文字字符中。此外,我在这里改变了方法,使用了index,而不是使用awk的范围法,这更适合这种情况。

start='int foo(float y, bool k)'
awk -v start="$start" '
index($0,start){
found=1
startLine=FNR
}
found{
val=(val?val ORS:"")$0
}
$0 ~ /}/{
if(val){  print val }
print "The content is between lines " startLine " and " FNR
exit
}'  Input_file

相关内容

  • 没有找到相关文章

最新更新