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)
有一些想法,小费或诀窍吗?我能在一个命令中得到我想要的结果吗?
以下一行给出了所需的结果:
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'
放回未更改的换行符。