このsedコマンドがパターンをキャプチャできないのはなぜですか?

このsedコマンドがパターンをキャプチャできないのはなぜですか?

sed文字列の周りに括弧のペアを配置するためにonelinerを使用したいと思います。

私が試したことは次のとおりです。

echo 1 | sed -e 's/.*/(\0)/'

文字が1パターンと一致するようにしたいと思います.*

しかし、出力はただ

(0)

実際、次のような結果を得たいと思います。

(1)

sedOSXでBSDを使用しています

答え1

&完全なパターンマッチングを置き換える標準的な方法です。いくつかのsed実装(GNUやbusyboxなど)はそれを\0代替としてサポートしていますが、これは標準でも移植可能でもありません。

$ echo 1 | sed -e 's/.*/(&)/'
(1)

コマンドに最初の(空になる可能性がある)シーケンスが含まれています。数値、一行に括弧内にできるだけ多く入力してください。これには、有効な文字を形成しないバイトを含む行の完全な行が含まれない場合があります。この場合、以下を見つけることができます。

sed 's/^/(/; s/$/)/'

より安定して動作し、完全に密閉されています。ワイヤーかっこ内。

答え2

\1最初のキャプチャグループが参照されます。現在、キャプチャグループがないため、中括弧を使用して一致をキャプチャグループとして定義し、次を使用して参照できます\1

$ echo 1 | sed 's/\(.*\)/(\1)/'
(1)

答え3

私は次のawkコマンドを使ってこれをしました。

echo 1 | awk '{print "("$0")"}'

出力

(1)

関連情報