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 変数で別の構文を使用できます。リテラル値ではなくパターンを検索しているため、'*' は役に立ちません。

これを試して:

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

したがって、検索の 2 つの条件を一致させることができます

于 2013-03-28T14:52:38.977 に答える