0

我有一个文件“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

即使使用 grep

grep -e "$str" $Input_file

它说没有这样的匹配模式。我哪里错了。

4

3 回答 3

2

试试这个:

grep -A1 "^%name=" $Input_file | grep -B1 "^%value=" | grep -v "^--"
于 2013-03-28T14:51:03.107 回答
1

您不能在 awk 中直接使用您的“模式(str)”。因为 awk default 在多行模式下不起作用。但是,您可以使用 awk 执行此操作:

 awk '/^%name=/{n=$0;next}/^%value=/&&n{print n"\n"$0}{n=""}' file

以您的示例为例,上述单行输出:

%name=ABC
%value=123
%name=XYZ
%value=789
于 2013-03-28T14:58:17.940 回答
0

您可以在 $str 变量中使用不同的语法,'*' 没有用,因为您正在搜索模式而不是文字值,对于 gawk 我不禁抱歉

试试这个:

str="\%name=|\%value="
egrep $str $input_file

所以你可以匹配你搜索的两个条件

于 2013-03-28T14:52:38.977 回答