質問

次のようなパターンがあります

hi
hello
hallo
greetings
salutations
no more hello for you

次のコマンドを使用して、すべての改行をタブに置き換えようとしています

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

しかし、機能していません。

誰か助けてくれませんか? sed / awkで解決策を探しています。

役に立ちましたか?

解決

必要な出力がわからない

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

他のヒント

こちら tr の方が良いと思います:

tr "\n" "\t" < newlines 

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

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

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

改行を1行ずつ sed で置き換えることはできません。行を蓄積して、改行を between 置き換える必要があります。

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&quot; s _ / \ n _ / \ t_g&quot; は、すべてのスラッシュに続いて改行を入れて「スラッシュとそれに続くタブ」。アンダースコアは s コマンドの区切り文字の役割を果たしているため、スラッシュを検索および置換用の文字としてより簡単に使用できます。

paste -s

-s各個別入力ファイルのすべての行を連結します                  コマンドラインの順序。すべての行の改行文字                  ただし、各入力ファイルの最後の行は、                  -dオプションで指定されていない限り、タブ文字。

sedスクリプトがほとんど揃っているので、次のように変更する必要があります。

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

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top