2009-10-24 19 views
11

私は改行をタブ文字で置き換える方法は?

hi 
hello 
hallo 
greetings 
salutations 
no more hello for you 

以下のようなパターンを持っている私は、次のコマンド

sed -e "s_/\n_/\t_g" 

を使用して、タブで、すべての改行を交換しようとしていますが、それは働いていません。

誰でもお手伝いできますか?私はsed/awkのソリューションを探しています。

答えて

11

ないあなたはあなたがsedでラインごとに改行を置き換えることはできません

# awk -vRS="\n" -vORS="\t" '1' file 
hi  hello hallo greetings  salutations  no more hello for you 
32

ここtrが良いですが、私は思う:

tr "\n" "\t" < newlines 

Nifleコメントで示唆したように、ここでnewlinesは、元のテキストを保持するファイルの名前です。

sedはライン指向であるため、このような場合に使用する方がより複雑です。

+1

+1ビート・ミー・40秒 – Nifle

+0

@Nifle:ここでも「cat」はありませんが、誰が数えていますか? :) – Telemachus

+0

「改行」がテキストファイルであることを指摘したいかもしれません。 – Nifle

5

をしたい出力について確認してください。行を累積して改行の間に置き換える必要があります。

text abc\n <- can't replace this one 

text abc\ntext def\n <- you can replace the one after "abc" but not the one at the end 

このsedスクリプトは、すべての行を蓄積し、すべての改行を排除しますが、最後:

sed -n '1{x;d};${H;x;s/\n/\t/g;p};{H}' 

ところで、あなたのsedスクリプトsed -e "s_/\n_/\t_g"はと改行が続くすべてのスラッシュを置き換える」言おうとしていますスラッシュの後にタブが表示されます。アンダースコアはsコマンドの区切り文字の役割を引き継ぎ、スラッシュを検索や置換のための文字として使いやすくします。

6
sed '$!{:a;N;s/\n/\t/;ta}' file 
+1

あなたは使用しているコマンドについても説明できますか? – Vijay

+0

最後の行でない場合は、次の行をパターンスペースで結合し、改行を代入してから次の行に分岐します。 – ghostdog74

1
paste -s 

-sは コマンドライン順に各別の入力ファイルの行のすべてを連結します。 -dオプションで特に指定されていない限り、各行の改行文字は、 の各入力ファイルの最後の行を除き、 タブ文字に置き換えられます。あなたのsedスクリプトではほとんど存在し

0

、あなただけにそれを変更する必要があるだろう:

sed -e "s/\n/\t/g" 

\は脱出のために、あなたは_ を追加する必要はありませんそして、あなたがする必要が十分にあります最後にgの前に/を追加して、これがスクリプトの最後の部分であることをsedに知らせます。

関連する問題