首页 > 解决方案 > Bash:从变量末尾删除所有特殊字符(不仅仅是 CR 或 LF)

问题描述

我有一些文本文件并使用 将第一行放入变量中var=$(head -n 1 "$@"),但是该变量包含我想要删除的特殊字符(ASCII 1-31)。

有没有一种快速的方法可以从 ASCII 码 1-31 中去除变量的结尾?我已经使用过${var//[^[:ascii:]]/}并且var="${var//[$'\t\r\n']}"已经使用过,但是我需要以简单的方式从末尾删除 ASCII 1-31(不仅仅是 CF/LF/Tab/FF/等)。

标签: bash

解决方案


控制字符有一个字符类——引用grep 手册

[:cntrl:]

控制字符。在 ASCII 中,这些字符具有 000 到 037 和 177 (DEL) 的八进制代码。在其他字符集中,这些是等效字符(如果有)。

所以,你可以做

var=${var//[[:cntrl:]]}

推荐阅读