从bash变量中删除非打印字符

Ste*_*nov 12 variables bash

我有一些变数$a.此变量具有非打印字符(回车符^ M).

>echo $a
some words for compgen
>a+="END"
>echo $a
ENDe words for compgen
Run Code Online (Sandbox Code Playgroud)

我怎么能删除那个炭?我知道echo "$a"显示它是正确的.但在我的情况下,它不是一个解决方案.

dev*_*ull 24

你可以使用tr:

tr -dc '[[:print:]]' <<< "$var"
Run Code Online (Sandbox Code Playgroud)

将删除不可打印的字符$var.

$ foo=$'abc\rdef'
$ echo "$foo"
def
$ tr -dc '[[:print:]]' <<< "$foo"
abcdef
$ foo=$(tr -dc '[[:print:]]' <<< "$foo")
$ echo "$foo"
abcdef
Run Code Online (Sandbox Code Playgroud)

  • *注意:*这也将删除变音符号和许多其他实际可打印的字符. (6认同)
  • 通过https://alvinalexander.com/blog/post/linux-unix/how-remove-non-printable-ascii-characters-file-unix的调整,我得到了更好的结果:`tr -cd'\ 11\12\15\40-\176'` (2认同)

che*_*ner 7

要仅删除尾随回车a,请使用

a=${a%$'\r'}
Run Code Online (Sandbox Code Playgroud)