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