如何使用 tr 命令替换:句号、感叹号和问号后跟一个空格,以及换行符?

6 text-processing tr

我有这样的文字:

I am happy. I am here. How are you, Meg? 
Run Code Online (Sandbox Code Playgroud)

我希望这是:

I am happy.
I am here.
How are you, Meg? 
Run Code Online (Sandbox Code Playgroud)

对于完全停止,我尝试过

tr -s '. ' '\n' <file.txt >out.txt
Run Code Online (Sandbox Code Playgroud)

但它不起作用。

Kus*_*nda 13

你没有。 tr不是为此而设计的。它旨在将一组单个字符音译为另一组单个字符,例如,A-Z转换为a-z. 使用trwith .?(一个点和一个空格)并将\n用换行符替换所有的点和空格。

使用 (GNU)sed代替:

$ echo 'I am happy. I am here. How are you, Meg?' | sed 's/\([!.?]\) /\1\n/g'
I am happy.      
I am here.       
How are you, Meg?
Run Code Online (Sandbox Code Playgroud)

sed此处的编辑脚本将用相同的字符和换行符替换所有出现的!,.或?后跟空格的 。


Zum*_*rio 6

据我所知,tr它只适用于单个字符,而"."是一个字符串而不是一个字符,所以可以使用sedor来做你想做的事情awk,例如:

sed -e "s/\. /\n/g" file.txt > out.txt
Run Code Online (Sandbox Code Playgroud)

  • @argle 好吧,他不能。 (9认同)
  • 我知道。我只是没有意识到即使有明确的约束也允许 xy 答案。这可能是我的答案。所以我在抗议。:P (2认同)