sed式にシェルコマンドを含める方法は?

sed式にシェルコマンドを含める方法は?

次の形式のテキストファイルがあります。

keyword value
keyword value
...

ここで、キーは単一の単語で、値は行が終了する前のすべての項目です。 (キーワードではなく)値をシェル拡張に適用して、シェルスクリプトからファイルを読みたいと思います。

sedを使用してキーワードと値の部分を簡単に一致させる

input='
keyword value value
keyword "value  value"
keyword `uname`
'

echo "$input"|sed -e 's/^\([^[:space:]]*\)[[:space:]]\(.*\)$/k=<\1> v=<\2>/'

生産する

k=<keyword> v=<value value>
k=<keyword> v=<"value  value">
k=<keyword> v=<`uname`>

しかし、問題は、sed式の代替部分にシェルコマンドを含める方法です。この場合は\1 `echo \2`

ベストアンサー1

GNU では、sed次のコマンドを使用できます。

sed -nr 's/([^ ]+) (.*)/echo "\1" \2\n/ep' input

任意の出力:

keyword value value
keyword value  value
keyword Linux

あなたの入力データとして。

説明する:

-n通常の出力を抑制するには、sedコマンドでこのオプションを使用します。-rパターンで特殊文字の一部のエスケープを防ぐ拡張正規表現を使用するには、渡しますが必須ではありません。

このsコマンドは、入力行をコマンドに変換するために使用されます。

echo "\1" \2

キーワードは引用され、値は引用されません。 sedに代替コマンドをシェルコマンドとして実行し、その結果をパターンバッファ(複数行を含む)に読み込むように指示するコマンドにeオプション(GNU関連)を渡します。コマンドの実行後にパターンバッファを印刷するには、after(!)オプションをs使用します。pesed

おすすめ記事