0

「expregex」行のファイルがあります。このファイルには、他のテキストを含む行を含めることができます。例えば:

exp [a-zA-Z].*\.sh~$
exp test
tmp too
exp tmp
trololo

このファイルのコンテンツをgrepする必要があります。egrep file '^exp ' | sed 's/^exp //'結果は次のとおりです。

[a-zA-Z].*\.sh~$
test
tmp

しかし、このgrepの結果を|で区切る必要があります。\nの代わりに

[a-zA-Z].*\.sh~$|test|tmp

この結果を別のgrep正規表現として使用する必要があるためです。たとえば、ネストされたgrepと一致するファイルを印刷するには:

ls | egrep "`egrep file '^exp ' | sed 's/^exp //'\`"

ネストされたgrepの後| sed置換

ls | egrep "[a-zA-Z].*\.sh~$|test|tmp"

または、ファイルからregexをエクスポートして、フィルターファイルに使用するためのより良い方法はありますか?

ケント:これを代用に使用するにはどうすればよいですか?私はそれが次のようだと思います:

ls | egrep "`awk '/^exp /{sub(/^exp /,"");s=(s?s"|":s) sprintf("%s",$0)}END{print s}' file`"

しかし、私はおそらく間違っています。

4

2 に答える 2

3

これを試してみてください:

grep '^exp ' file.txt | sed 's/^exp //' | paste -sd '|'

またはさらに良いことに、必要はありませんgrepsedCADはネイティブにそれを行います:

sed -n '/^exp/s/^exp //p' file.txt | paste -sd '|'

ワンライナーにオープンであるならば:

perl -ne 'push @arr, $1 if /^exp (.*)/;END{print join "|", @arr}' file.txt
于 2013-03-17T15:57:45.323 に答える
2

とを保存してgrepsed単一のプロセスを使用できます:awkワンライナー

awk '/^exp /{sub(/^exp /,"");s=(s?s"|":s) sprintf("%s",$0)}END{print s}' file

少しテストしてください:

kent$  on feature at master!? echo "exp [a-zA-Z].*\.sh~$
exp test
tmp too
exp tmp
trololo"|awk '/^exp /{sub(/^exp /,"");s=(s?s"|":s) sprintf("%s",$0)}END{print s}'
[a-zA-Z].*\.sh~$|test|tmp
于 2013-03-17T16:09:11.010 に答える