単語を探したい巨大なファイルがあります。pattern
。私は例えば私の状況を説明しようとしました。
私のファイルのどこかに私が持っているとしましょう。
Sample-pattern="abc"
Sample
ハイフンの前の単語abc
と引用符の中の単語をエコーするスクリプトを作成したいと思います。
だからあれば
Sample2-pattern="xyz"
それは鳴りますSample2
。xyz
pattern
その単語がファイルの他の場所にある可能性があります。ただし、pattern
単語の前にハイフン以外の文字がある場合、スクリプトはこれを無視する必要があります。たとえば、次のような場合
Sample3pattern.....
これを無視する必要があります。
ベストアンサー1
入力がありますfile.txt
:
Sample-pattern="abc"
Sample2-pattern="xyz"
Sample3pattern="def"
次のsed
スクリプトは、次の出力を生成します。
$ sed -E -n -e '/-pattern/ s/^([^-]*)-[^=]*="([^"]*)"/\1 \2/p' file.txt
Sample abc
Sample2 xyz
上記のスクリプトは、sed
1行の最初の文字の前のすべてのテキストと1行-
の最初の文字の後の二重引用符内のすべてのテキストを印刷します。=
正規表現と一致しない行は印刷されません(/-pattern/
アドレス指定とs///
検索と置換の両方)。
注:拡張正規表現を有効にするには、-E
オプションを使用します。これはsed
GNU、* BSD、Mac OSでsed
動作します。近い将来にはPOSIX標準になります。-E
-r
sed
-E
デフォルトの正規表現バージョンは次のとおりです。
sed -n -e '/-pattern/ s/^\([^-]*\)-[^=]*="\([^"]*\)"/\1 \2/p'