Cygwinでgrepを使用して一致する単語を抽出する

Cygwinでgrepを使用して一致する単語を抽出する

私はCygwinを使っていてPOSIX正規表現情報を見ました。

XMLファイルから文字列を検索しようとしていますが、行全体を引き続き取得しますが、探しているいくつかの文字で結果を絞り込むことはできないようです。

ファイル(file1)には複数のインスタンスがあります。

<!ENTITY abc123456 SYSTEM "../blah/abc123456.xyz" NDATA xyz>
<!ENTITY abc123457 SYSTEM "../blah/abc123457.xyz" NDATA xyz>
<!ENTITY abc123458 SYSTEM "../blah/abc123458.xyz" NDATA xyz>

grep の結果には行全体が表示されますが、結果の範囲を次のように絞り込もうとします。

abc123456.xyz
abc123457.xyz
abc123458.xyz

以下は私に次の行を正常に提供します。

grep -E abc[[:digit:]] file1
grep abc[0-9] file1
grep "abc[[:digit:]]" file1

私が探しているものが行の先頭または末尾にないため、^と$は役に立たないようです。私が探しているものを固定する方法を知りません。私は成功せずにgrepを使って他の多くのバリエーションを試しました。

ベストアンサー1

よりエレガントなソリューション(おそらく1つ)が必要ですgrep -Pが、単純なアプローチで十分ではない場合は、それを使用して目的の文字列をsedシミュレートして取得できます。grepgrep -o

sed -nr 's/.*SYSTEM "..\/blah\/([^"]*).*/\1/p'

これはデフォルトで文字列全体と一致し、それを探している部分文字列に正確に置き換えられます。

おすすめ記事