0


私はsedを使用してテキストをキャプチャし、外部コマンドを実行し、キャプチャグループの値を画面とファイルに出力しています。
これは私が必要とするコマンドの例です:

echo testme | sed -r 's/([a-z]{4}).*/'"$(echo "\1" | tee out.txt)"'/g'

つまり、キャプチャ グループ ( \1 ) の値 ( test ) をファイルに出力する必要があります。 しかし、画面上では正しいテキストが表示されます:

test

ファイルに次のように表示されます。

\1

キャプチャ グループの表記は、画面ではなくファイルに出力する場合、値が展開されないようです。

私が間違っていることと、キャプチャグループの値をファイルに出力する方法を教えてください。
可能であればお願いします - grep/awk による解決策はありません。sed(またはおそらくssed)を使用してそれを行う必要があります。
ありがとう!

4

2 に答える 2

1

基本的にはこの方法で実行できますが、それが本当に必要かどうかはわかりません:

echo testme | tee >(sed -r 's/([a-z]{4}).*/\1/g' > out.txt)

フィルタリングされたバージョンがout.txtに送信される一方で、画面上で変更されていないtestmeが送信されます。

フィルタリングされたバージョンの両方を画面とファイルに送信する場合は、最後の部分で tee を使用できます。

echo testme | sed -r 's/([a-z]{4}).*/\1/g' | tee out.txt

バージョンの追加:

echo testme | tee >(sed -r 's/([a-z]{4}).*/\1/g' >> out.txt)

echo testme | sed -r 's/([a-z]{4}).*/\1/g' | tee -a out.txt
于 2013-09-14T00:43:57.523 に答える
1

これはうまくいくかもしれません(GNU sed):

sed -r '/([a-z]{4}).*/!b;s//\1/;w out.txt' file

また:

sed -rn 's/([a-z]{4}).*/\1/p;T;s/.*/echo "&" | tee out.txt/e' file
于 2013-09-14T01:16:50.233 に答える