sed逆参照:各行を取得して行の末尾に追加します。

sed逆参照:各行を取得して行の末尾に追加します。

次の内容を含むファイルがあります。

$ cat -n w
     1  Smith   John    12345   jsmith
     2  Jones   Robert  23456   rjones
     3  Green   Ralph   34567   rgreen
     4  Brown   Fred    45678   fbrown
     5  Orange  Mabel   56789   morang

各行を取得し、その行の最後にその行の同じテキストを追加したいと思います。

例 次のような出力が必要です。

$ cat -n w
     1  Smith   John    12345   jsmith  Smith   John    12345   jsmith
     2  Jones   Robert  23456   rjones  Jones   Robert  23456   rjones
     3  Green   Ralph   34567   rgreen  Green   Ralph   34567   rgreen
     4  Brown   Fred    45678   fbrown  Brown   Fred    45678   fbrown
     5  Orange  Mabel   56789   morange Orange  Mabel   56789   morange

逆参照を使用してsedコマンドを調べましたが、正しく機能しませんでした。

$ sed 's/(.*)/\t\1/' wider
sed: -e expression #1, char 12: invalid reference \1 on `s' command's RHS

ベストアンサー1

sed使用着替えるデフォルトでは、\(...\)一致をキャプチャするにはエスケープが必要です。

LC_ALL=C sed 's/\(.*\)/\1\t\1/' <file

または、次を使用して-E有効にするむしろ(GNU sedおよびBSD sedで利用可能であり、まもなく標準になる予定です)エスケープできません(...)

LC_ALL=C sed -E 's/(.*)/\1\t\1/' <file

無効なUnicode文字を一致させるのに役立つようにロケールを設定しますC

しかし、これはうまくいきますpaste

paste file file

またはawk:

awk '{printf "%s\t%s\n", $0, $0}' <file

おすすめ記事