使用 tr 仅转换空格,不转换制表符或换行符

Convert only spaces, not tabs or newlines, with tr

我正在尝试在 bash 脚本中通过替换 space 来转换一行代码,并且仅将 space 字符替换为“,”逗号字符。我不希望制表符或换行符受到影响。
我有有效的代码:

cat $FILE | tr '\t' '@' | tr '\n' '%' | tr '[:space:]' ',' | tr '@' '\t' | tr '%' '\n' > $NEWFILE

但显然这并不优雅。我知道必须有一种方法可以在不涉及换行符或制表符的情况下仅识别 space ' ' 字符。这样我就不必将这些字符转换为其他字符然后再转换回来。

有什么想法吗?

如果您只想转换常规 space 字符,请不要使用 [[:space:]](它 显式 存在,目的是转换制表符和换行符以及常规 spaces);只需使用 </code>.</p> <pre><code>tr ' ' ',' <"$FILE" >"$NEWFILE"