次の内容を含むファイルがあります。
$ 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
答え2
この試み:
sed 's/\(.*\)/\1\t\1/' <filename>
答え3
awkの使用に反対しない場合は、次の方法に従ってください。
awk '{print $0"\t"$0}'