空白を削除するSed


28

誰もがSedを使用してテキストファイル内のすべての空白スペースを削除する方法を知っていますか?私はそうするために「d」削除コマンドを使用しようとしましたが、それを理解することができないようです

回答:


35

どんな「スペース」ですか?

「すべての空白スペースを削除する」とは、次のいずれかを意味します。

  1. スペース文字codeのすべての出現を削除します0x20
  2. 水平タブ文字「\t」を含むすべての水平スペースを削除します
  3. 改行、「\n」などを含むすべての空白を削除します

仕事に最適なツール

sedそれが何らかの隠れた理由の要件ではない場合は、ジョブに適したツールを使用することをお勧めします。

このコマンドtrの主な用途は、文字のリストを他の文字のリストに変換することです(そのため「tr」という名前になります)。まれに、空の文字リストに変換できます。オプション-d--delete)は、リストに表示される文字を削除します。

文字のリストは、[:...:]構文で文字クラスを使用できます。

  1. tr -d ' ' < input.txt > no-spaces.txt
  2. tr -d '[:blank:]' < input.txt > no-spaces.txt
  3. tr -d '[:space:]' < input.txt > no-spaces.txt

主張するとき sed

sedでは、[:...:]文字クラスの構文をregexpsの文字セットの構文と組み合わせる必要があり[...]、やや混乱します[[:...:]]

  1. sed 's/ //g' input.txt > no-spaces.txt
  2. sed 's/[[:blank:]]//g' input.txt > no-spaces.txt
  3. sed 's/[[:space:]]//g' input.txt > no-spaces.txt

1
+1、空白のPOSIX表記が適切な方法です。
アビナッシュラジ14年

1
このタスクにtrを使用するための優れたヒントは、非常に効果的です。調整する必要があるのは、trがstdinからの入力を読み取ることだけでしたtr -d ' ' < input.txt > no-spaces.txt
スカイ

@Skyのコメントは、macOSで機能します(Linuxではテストされていません)。たぶん答えを更新する必要がありますか?
iplus26

@Skyに感謝します。それは確かに悪いエラーです。ここで3行を修正しtrます。(他のどこかで見ますか?)
Volker Siegel

7

これを使用して、次のすべての空白を削除できますfile

 sed -i "s/ //g" file

2
サイコロなし。私も同様のアプローチを試しました。動作しない
ジャスティン14年

空白またはタブを削除しますか?
サイラス14年

1
空白を削除する
ジャスティン14年

2
簡単なテスト:man sed | sed "s/ //g"
Cyrus

1
@starscream_disco_party:同じです。あなたはすべての3を置き換えることができます/別の文字で、例えば:sed "ss ssg"
サイラス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.