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)
Основываясь на показанных вами образцах, не могли бы вы попробовать следующее. Заключите переменную оболочки в кавычки '...'
(одинарные кавычки), чтобы символы внутри были буквальными. Также я изменил здесь подход и использовал 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