use*_*489 7 sed awk whitespace tr text-formatting
假设我有一个(可能非常大)文本文件,其中包含一个插入空格的单词列表。例如,它可能如下所示:
Cat Dog
Soup Rat
Cass Audrey
Run Code Online (Sandbox Code Playgroud)
我希望每个单词都在一个单独的行上(没有空格),如下所示:
Cat
Dog
Soup
Rat
Cass
Audrey
Run Code Online (Sandbox Code Playgroud)
我可以做一个简单tr -d " "的把它变成:
CatDog
SoupRat
CassAudrey
Run Code Online (Sandbox Code Playgroud)
(但这不是我想要的)。
我不知道用什么类型的空格来分隔这些单词,因此假设它是普通 ASCII 空格和制表符的某种组合。(我们可以假设没有不可见的 Unicode 字符,比如空格和零宽度的东西。)?自然,这些词不包含空格,所以?“à la”、“alma mater”、“apple pie”、“at large”和“ice cream”不是有效词。
假设单词可能包含(非空白)非字母字符,例如“AC/DC”、“add-on”、“AT&T”、“audio-visual”、“can't”、“carbon-14” 、“jack-o'-lantern”、“岳母”、“o'clock”、“O'Reilly”、“RS-232”和“3-D”。理想情况下,解决方案应该容忍非 ASCII 字符,如“Ångström”、“Gödel”、“naïve”、“resume”和“smörgåsbord”。
如何使用常见的 Unix/Linux 工具(如tr、sed或)在保留(和隔离)缩进单词的同时去除所有这些空格awk?
如果该解决方案也适用于所述问题的更一般情况,那就太好了;即,不仅是两列文本,还有随机排列,例如:
Cat Dog
Soup Rat
Cass Audrey
Run Code Online (Sandbox Code Playgroud)
G-M*_*ca' 13
etopylight 几乎是对的:
tr -s ' \t' '\n'
Run Code Online (Sandbox Code Playgroud)
因为这个问题也要求替换标签。
你应该可以使用
sed -e 's/[[:space:]]\{1,\}/\n/'
Run Code Online (Sandbox Code Playgroud)
用单个换行符替换一个或多个空白字符的任何序列(包括换页符和垂直制表符等奇怪的字符)。