条件付きパターンの検索

条件付きパターンの検索

単語を探したい巨大なファイルがあります。pattern。私は例えば私の状況を説明しようとしました。

私のファイルのどこかに私が持っているとしましょう。

Sample-pattern="abc"

Sampleハイフンの前の単語abcと引用符の中の単語をエコーするスクリプトを作成したいと思います。

だからあれば

Sample2-pattern="xyz"

それは鳴りますSample2xyz

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

上記のスクリプトは、sed1行の最初の文字の前のすべてのテキストと1行-の最初の文字の後の二重引用符内のすべてのテキストを印刷します。=正規表現と一致しない行は印刷されません(/-pattern/アドレス指定とs///検索と置換の両方)。

注:拡張正規表現を有効にするには、-Eオプションを使用します。これはsedGNU、* BSD、Mac OSでsed動作します。近い将来にはPOSIX標準になります。-E-rsed-E

デフォルトの正規表現バージョンは次のとおりです。

sed -n -e '/-pattern/ s/^\([^-]*\)-[^=]*="\([^"]*\)"/\1 \2/p'

おすすめ記事