У меня есть файл «input_file» с содержанием, как этотПроблемы в регулярных выражениях шаблона с использованием Gawk, Grep
%name=ABC
%value=123
sample text in file
sample text in file
%name=XYZ
%value=789
sample text in file
мне нужно извлечь строки этого файла, соответствующий этот шаблон.
str="%name=*\n%value=*"
Я работал так
gawk -v st=$str '/"$st"/ {print}' $Input_file
Я получаю ошибку
gawk: ^backslash not last character on line
Даже с Grep как в
grep -e "$str" $Input_file
он говорит, что нет такого сопоставив образец. Где я иду не так.
Во-первых - 'grep' является линия-ориентированной, так многострочный модель никогда не будет соответствовать , Во-вторых - 'gawk' ориентирован на линию по умолчанию, поэтому, если вы хотите совместить многострочный шаблон, вам нужно установить [разделитель записей' RS'] (http://www.gnu.org/software/gawk/ manual/gawk.html # Records) к чему-то соответствующему. В-третьих - для целей отладки, я думаю, вам лучше написать свою команду 'gawk' напрямую (например,' gawk '/% name = * \ n% value = */{print}' ', вместо использования переменных Bash и так как в последнем случае трудно определить, находится ли проблема на конце AWK или на конце Bash. – ruakh
В-четвертых, '= *' означает «ноль или более знаков равенства». Для «знака равенства , плюс ноль или более символов ", напишите' =. * '. – ruakh