Bash:从变量末尾删除所有特殊字符(不仅仅是CR或LF)
我有一些文本文件并使用 将第一行放入变量中var=$(head -n 1 "$@"),但是该变量包含我想要删除的特殊字符(ASCII 1-31)。
有没有一种快速的方法可以从 ASCII 代码 1-31 中去除变量的结尾?我已经使用过${var//[^[:ascii:]]/}并且var="${var//[$'trn']}"已经使用过,但是我需要以一种简单的方式从末尾删除 ASCII 1-31(不仅仅是 CF/LF/Tab/FF/等)。
回答
有一个用于控制字符的字符类——引用自grep 手册:
[:cntrl:]控制字符。在 ASCII 中,这些字符具有八进制代码 000 到 037 和 177 (DEL)。在其他字符集中,这些是等效字符(如果有)。
所以,你可以做
var=${var//[[:cntrl:]]}