如何在bash中替换字符串中的空格和斜杠?

har*_*on4 6 regex bash scripting optimization tr

给字符串:

foo='Hello     \    
World! \  
x

we are friends

here we are'
Run Code Online (Sandbox Code Playgroud)

在角色之前或之前,还有与空格混合的制表\符.我想只用空格替换空格,制表符和斜杠.我尝试过:

echo "$foo" | tr "[\s\t]\\\[\s\t]\n\[\s\t]" " " | tr -s " "
Run Code Online (Sandbox Code Playgroud)

返回:

Hello World! x we are friend here we are 
Run Code Online (Sandbox Code Playgroud)

我需要的结果是:

Hello World! x

we are friends

here we are
Run Code Online (Sandbox Code Playgroud)

有一些想法,小费或诀窍吗?我能在一个命令中得到我想要的结果吗?

Ger*_*wer 3

以下一行给出了所需的结果:

echo "$foo" | tr '\n' '\r' | sed 's,\s*\\\s*, ,g' | tr '\r' '\n'
Hello World!

we are friends

here we are
Run Code Online (Sandbox Code Playgroud)

解释:

tr '\n' '\r'从输入中删除换行符以避免换行符的特殊 sed 行为。

sed 's,\s*\\\s*, ,g'将嵌入 \ 的空格转换为一个空格。

tr '\r' '\n'放回未更改的换行符。