Linuxでは、複数のタブとスペースを1つの新しい行に置き換えますか?

Linuxでは、複数のタブとスペースを1つの新しい行に置き換えますか?

スペースが挿入された単語のリストを含む(潜在的に非常に大きい)テキストファイルがあるとしましょう。たとえば、次のようになります。

Cat                           Dog
Soup                          Rat
Cass                          Audrey

次のように、各単語をスペースなしで別々の行に表示したいと思います。

Cat
Dog
Soup
Rat
Cass
Audrey

簡単にtr -d " "次のように変更できます。

CatDog
SoupRat
CassAudrey

(しかしそれは私が望むものではありません。)

どのタイプのスペースがこの単語を区別するのかわからないため、通常のASCIIスペースとタブの組み合わせであるとします。 (全幅スペースやゼロ幅などの見えないUnicode文字はないと仮定できます。)当然、これらの単語は存在しません。含む空白なので、「à la」、「alma mater」、「appleie」、「at free」、「icecream」は有効な単語ではありません。

単語に「AC/DC」、「add-on」、「AT&T」、「audio-video」、「can't」、「carbon-14」などのアルファベット以外の文字(スペースではない)を含めることができる仮定します。 , "jack-o'-lantern" ", "義母", "o'clock", "O'Reilly", "RS-232", "3-D". 理想的には、ソリューションは "Ångström", "Gödel" 、「naïve」、「résumé」、「smörgåsbord」などの非ASCII文字を許可する必要があります。

trsedなどの一般的なUnix / Linuxツールを使用したり、インデントされた単語を保持(および分離)しながらこれらのスペースをすべて削除するにはどうすればよいですかawk

この解決策が言及されている問題のより一般的な場合でも効果がある場合は良いでしょう。つまり、2つのテキスト列だけでなく、次のランダムな配列にも適用されます。

          Once    upon
    a   midnight
                    dreary
while                     I pondered
       weak    and weary
           Over                many
a   quaint  and     curious     volume
 of forgotten lore

ベストアンサー1

etopylightはほぼ正しいです。

tr -s ' \t' '\n'

質問では、タブの交換も要求するからです。

おすすめ記事