我有一个文件“Input_file”,内容如下
%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
即使使用
中的grepgrep -e "$str" $Input_file
它说没有这种匹配模式。我哪里错了。
答案 0 :(得分:2)
试试这个:
grep -A1 "^%name=" $Input_file | grep -B1 "^%value=" | grep -v "^--"
答案 1 :(得分:1)
你不能直接在awk中使用你的“pattern(str)”。因为awk默认在多行模式下不起作用。但是你可以用awk做到这一点:
awk '/^%name=/{n=$0;next}/^%value=/&&n{print n"\n"$0}{n=""}' file
以你的例子,上面的单行输出:
%name=ABC
%value=123
%name=XYZ
%value=789
答案 2 :(得分:0)
你可以在你的$ str变量中使用不同的语法,'*'是无用的,因为你搜索的模式不是文字值,因为gawk我不禁抱歉
试试这个:
str="\%name=|\%value="
egrep $str $input_file
因此,您可以匹配搜索的两个条件