たとえば、中かっこ内に多くの単語を含むファイルがあります。 {test1}、{test2} -grep
これらの単語を処理して他のリストを出力するにはどうすればよいですか?
出力例:
{test1}
{test2}
私はこれを無駄にしようとしました。
grep -o {.*} file.xml | sort | uniq
修正する
実際 - これはうまくいくようです:
grep -oP '{.*?}' file.xml | sort | uniq
ベストアンサー1
最初の試みには2つの問題があります。{.*}
シェル拡張から保護する必要がある特殊文字を含みます。パターンを引用符で囲みます。また、{.*}
行で角かっこで区切られた最も長いテキストが一致するため、それを含む行がある場合はmatchによってhello {test1} world {test2} howdy
出力されます。{test1} world {test2}
.*
test1} world {test2
以下は角かっこの間にある内容だけを出力します。
grep -o -e "{[^}]*}"
私の元の式は "{.*}" を使用していますが、行内の最小の角かっこではなく、最も広い角かっこを見つけることが返されます。