特定のテキストファイルからすべての空白を削除する方法


81

特定のテキストファイルからすべての空白を削除したいと思います。これに使用できるシェルコマンドはありますか?または、sedこの目的での使用方法。

私は以下のようなものが欲しいです:

$ cat hello.txt | sed...。

私はこれを試しました:。cat hello.txt | sed 's/ //g'しかし、それはタブではなくスペースだけを削除します。


3
「すべての空白」とは、改行も意味しますか?
glenn jackman 2013年

回答:


133
$ man tr
NAME
    tr - translate or delete characters

SYNOPSIS
    tr [OPTION]... SET1 [SET2]

DESCRIPTION
   Translate, squeeze, and/or delete characters from standard 
   input, writing to standard output.

改行を含むすべての空白を消去するには、次のことを試すことができます。

cat file.txt | tr -d " \t\n\r" 

tr(htompkinsコメントへのクレジット)で定義された文字クラスを使用することもできます。

cat file.txt | tr -d "[:space:]"

たとえば、水平方向の空白だけを消去するには、次のようにします。

cat file.txt | tr -d "[:blank:]"

23
で定義された文字クラスを使用することもできtrます。例:すべての空白cat file.txt | tr -d "[:space:]" を削除するには:すべての水平方向の空白を削除するには:cat file.txt | tr -d "[:blank:]"
htompkins 2014

@ user3901666それは空白を削除します、はい、生成された出力があなたが望むものと一致する場合、言うのは難しいです-あなたは何を試しましたか?
PauloScardine19年

24

私の意見よりもはるかに簡単です:

sed -r 's/\s+//g' filename

2
これを試したところ、修正されたテキストがSTDOUTに出力されますが、ファイル自体は変更されません。
マックスウィリアムズ

4
@MaxWilliams --sedで-i(ダッシュi)フラグを使用するだけ
JeffCharter 2014

1
これは改行を削除しません、それがOPによって望まれたかどうかはわかりません。
Graeme Moss

11

別の行に変更するなどの情報を失わずに、sedを使用してスペースを一掃することができると思います。

cat hello.txt | sed '/^$/d;s/[[:blank:]]//g'

4
tr -d " " < infile.txt > outfile.txt
結構ですが

こんにちは、これはうまくいきますが、説明をいただければ幸いです。
David Okwii 2016年

11

これを試して:

sed -e 's/[\t ]//g;/^$/d' 

ここにあります

最初の部分はすべてのタブ(\t)とスペースを削除し、2番目の部分はすべての空の行を削除します


1
これは実際に機能します。sed -e's / [\ t] // g; / ^ $ / d '特に/ ^ $ / d'を説明するように注意してください。^は文字列の開始を表し、$は終了を表します。/ dは、sedを使用する場合の削除用です。しかし、この解釈はどのようにして空白の削除につながるのでしょうか?
David Okwii 2016年

説明を追加しました。^$「行の始まり」(^)を探し、その直後に「行の終わり」($)を探しているため、空の行に一致します。
キーザー2016年


4

私にとって最も簡単な方法->

        echo "Hello my name is Donald" | sed  s/\ //g


2

これを試して:

tr -d " \t" <filename

詳細については、tr(1)のマンページを参照してください。


2

おい、あなたのターミナルでただpythontest.py。

f = open('/home/hduser/Desktop/data.csv' , 'r')

x = f.read().split()
f.close()

y = ' '.join(x)
f = open('/home/hduser/Desktop/data.csv','w')
f.write(y)
f.close()

古いスレッドをぶつけて申し訳ありませんが、f.read().strip("\t\n\r ")より効率的ではありませんか?
Jachdich

2つ以上の後続のスペース、タブなどがある場合はどうなりますか?白黒の単語?あなたの解決策は、先頭と末尾の空白のためだと思います。ライナーが1つ必要な場合は、上記のコードを簡単に変換できます。
AgnibeshChauhan19年

2

この回答は他の回答と似ていますが、出力がSTDOUTに送られると不満を言っている人もいるので、元のファイルにリダイレクトして上書きすることを提案します。私は通常これを提案することは決してありませんが、時には迅速で汚い作品です。

cat file.txt | tr -d " \t\n\r" > file.txt

1

うーん...オーダーの何かsed -e "s/[ \t\n\r\v]//g" < hello.txtが正しい球場にあるはずのようです(いずれにせよcygwinの下で動作するようです)。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.