web-dev-qa-db-ja.com

sedを使用して空白行からタブを削除するにはどうすればよいですか?

sedを使用して、空白行からタブを削除したいと思います。たとえば、\t\nのみを含む行は\nに変更する必要があります。 これの構文は何ですか?

12
SundayMonday

sedは、\tのようなエスケープシーケンスについて知りません。したがって、コンソールで文字通りtabと入力する必要があります。

sed 's/^    *$//g' <filename>

Bashを使用している場合、コンソールでtabと入力することはできません。 ^Vを実行してから、tabを押す必要があります。 (Ctrl-Vそしてtab)リテラルタブを印刷します。

24
Hari Menon

任意の空白行を空の行に置き換えるには、

sed -r 's/^\s+$//'

-rフラグは、拡張正規表現を使用することを示し、^\s + $パターンは、空白を含むすべての行に一致しますが、他の文字は一致しません。

2
Adam Mihalcin

他の投稿されたソリューションは、行に1つ(そして1つだけ)のタブがある場合に機能します。 Raze2dustは、sedではリテラルタブを入力する必要があると指摘していることに注意してください。別の方法は次のとおりです。

sed '/[^      ]/!s/   //g' file-name.txt

タブしかない行からタブを置き換えるもの。反転されたクラスは、タブのバグを含む行に一致します-次の「!」これらの行と一致しなくなります。つまり、タブのみを持つ行のみを意味します。その後、置換はそれらの行でのみ実行され、すべてのタブが削除されます。

1
Kyle Burton

\ tがUNIXで認識されないことに気づきました。そうは言っても、実際のキーを使用してください。以下のコードでは、TABはタブキーを押すことを表します。

$ sed's/TAB // g'oldfile> newfile

わかりやすいヒント:タブを削除しようとしているファイルにタブがあることを確認するには、次のコードを使用して\ tが表示されるかどうかを確認します

$ od-cファイル名

0
M Karlos Green