テキストファイルから改行を削除するにはどうすればよいですか?


116

次のデータがあり、すべてを1行に入力する必要があります。

私はこれを持っています:

22791

;

14336

;

22821

;

34653

;

21491

;

25522

;

33238

;

私はこれを必要とする:

22791;14336;22821;34653;21491;25522;33238;

編集

これらのコマンドはどれも完全に機能していません。

それらのほとんどは、データを次のようにします。

22791

;14336

;22821

;34653

;21491

;25522

15
ブラウザのアドレスバーまたは別のテキストフィールドにコピーして貼り付けます。Quick'n'dirtyですが、少量のデータで機能します。
イグニス

回答:


245
tr -d '\n' < yourfile.txt

編集:

ここに投稿されたコマンドのいずれも機能しない場合は、フィールドを区切る改行以外のものがあります。おそらく、ファイルにDOS / Windowsの行末があるでしょう(その場合でも、Perlのソリューションが機能することを期待しています)?

試してください:

tr -d "\n\r" < yourfile.txt

それがうまくいかない場合は、ファイルをさらに詳しく(16進エディターなどで)調べて、削除する文字が実際にそこにあるかどうかを確認する必要があります。


7
この出力を同じファイルまたは別のファイルにどのように書き込みますか?
ゴールドネーム

3
tr空行には向かないと思います。どう思いますか?-- sedここで説明したように、stackoverflow.com
q / 16414410/54964 –LéoLéopoldHertz

出力を別のファイルにルーティングするには、出力リダイレクトを使用します。同じファイルにルーティングするには、「sponge」(Debianベースシステムの「moreutils」パッケージで利用可能)にパイプします。
プラグウォッシュ

同じファイルに出力を書き込むには、サブシェルを使用しますecho -n $(tr -d "\n" < yourfile.txt) > yourfile.txt
andpei

11
perl -p -i -e 's/\R//g;' filename

仕事をしなければならない。


ゴルフperl -pie 's/\R//g' filename
トレントン

9
paste -sd "" file.txt

1
Solarisでは(10)はpaste -sd ""、これまで、デフォルトでSTDINに使用しますのでもししている配管が動作しません: (some command) | paste -sd "" -
JohnGH

最後の改行も削除したい場合、これは機能しません。中間の改行のみを削除します。
ジョシュ

これはMac OSでは機能しませんでしたが、Sundeepのバージョンでは機能しました。paste -sd'\0' -
トレントン

7
tr -d '\n' < file.txt

または

awk '{ printf "%s", $0 }' file.txt

または

sed ':a;N;$!ba;s/\n//g' file.txt

このページは、改行を削除する他の方法がたくさんあります。

猫の虐待を削除するために編集:)


4

使用する

head -n 1 filename | od -c 

何が問題のキャラクターであるかを理解する。次に使用します

tr -d '\n' <filename

LF用

tr -d '\r\n' <filename

CRLFの場合



2

man 1 edを使用:

# cf. http://wiki.bash-hackers.org/doku.php?id=howto:edit-ed 
ed -s file <<< $'1,$j\n,p'  # print to stdout 
ed -s file <<< $'1,$j\nwq'  # in-place edit

2

オタクの事実:代わりにASCIIを使用してください。

tr -d '\012' < filename.extension   

(編集された原因私は同じ解決策を持っていたばかげた答えを見なかった、唯一の違いは私がASCIIを持っていたことでした)


2

sedとPOSIXクラスを使用する

空白(スペースとタブ)のみを含むすべての行を削除します

sed '/^[[:space:]]*$/d'

作業しているものを何でも取り、それにパイプするだけです

cat filename | sed '/^[[:space:]]*$/d'


sed -i '/ ^ [[:space:]] * $ / d' filename ...インプレース編集用。上記のように答えると、画面に出力されます
BradChesney79


1

データがfile.txtにある場合、次のようになります。

echo $(<file.txt) | tr -d ' '

' $(<file.txt)'はファイルを読み取り、内容を一連の単語として提供します。単語は、 'echo'の間にスペースを入れてエコーします。次に 'tr'コマンドはスペースを削除します:

22791;14336;22821;34653;21491;25522;33238;

これは、入力が大きすぎず、Bashを使用している限り機能します(Bashのタグが付けられているので、問題ありません)。私が今答えを書いていたら、それはになりますtr -d '\n' < file.txt。これは、受け入れられた答えがすることです(そして、私がその時にそれを書いていないことに驚いています)。これはおそらく、「まだそれを行う別の方法」を示すために書かれただけでしょう。
Jonathan Leffler、2015

1

xargs 改行も消費します(ただし、最後の最後の改行を追加します)。

xargs < file.txt | tr -d ' '

1

数字とセミコロンのみを保持したい場合、次の方法で大きなエンコーディングの問題がないと想定してトリックを実行できますが、最後の「改行」も削除されます。

$ tr -cd ";0-9"

上記を簡単に変更して、他の文字を含めることができます。たとえば、小数点、コンマなどを保持したい場合などです。


1

geditテキストエディターの使用(3.18.3)

  1. 検索をクリックします
  2. [ 検索と置換...]をクリックします。
  3. 検索フィールドに入力\n\sしてください
  4. 以下のままと交換し、ブランク(何も)
  5. 正規表現ボックスをチェック
  6. [ 検索 ]ボタンをクリックします

注:これは、OPの元の7歳の問題に正確に対処するものではありませんが、SEからここで同じように「テキストをすべて1行で取得するにはどうすればよいですか?」 。


1

今日は同じケースでしたが、vimまたはnvimで非常に簡単で、gJ行を結合するために使用できます。あなたのユースケースについては、ちょうどしてください

99gJ

これはすべての99行に参加します。99結合する行数に応じて、必要に応じて数を調整できます。1行だけに参加する場合gJは、それだけで十分です。


0

私はawkでそれをします、例えば

awk '/[0-9]+/ { a = a $0 ";" } END { print a }' file.txt

(欠点は、aがメモリに "蓄積"されることです)。

編集

printfを忘れた!だからまた

awk '/[0-9]+/ { printf "%s;", $0 }' file.txt

またはおそらくより良い、それはawkを使用して他のansですでに与えられていたもの。


0

私は通常、ファイルからコードスニペットをコピーしていて、不要な新しい行を追加せずにそれをコンソールに貼り付けたいときに、このユースケースを取得しました。結局、bashエイリアスを作成することになりました(知りたい場合は
呼び出しonelineます)。

xsel -b -o | tr -d '\n' | tr -s ' ' | xsel -b -i
  • xsel -b -o クリップボードを読む

  • tr -d '\n' 新しい行を削除します

  • tr -s ' ' 繰り返しスペースを削除します

  • xsel -b -i これをクリップボードに戻します

その後、クリップボードの新しい内容をコンソールなどの1行に貼り付けます。


0

奇妙なワードラップを修正するためにGUIでこれを行う必要がある場合は特に、最も明白で高速な回答がありません。

  • 開いた gedit

  • 次にCtrl+ H、次にFindテキストボックス\nReplace with空のスペース に入れて、チェックボックスRegular expressionと出来上がりを入力します。


0

ファイルの最後にある末尾の改行も削除するには

python -c "s=open('filename','r').read();open('filename', 'w').write(s.replace('\n',''))"
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.