问题描述
我有一个包含几个特殊字符的变量。现在我想把这些变成空间 如果我一一做,变化就很好 例如txt=$(printf "$txt" | sed 's/\xE2/ /g')
现在要一次更改它们,我将所有特殊字符插入到这样的文件中: \xE1 \xE2 \xC3 ...
如果我想通过这样做来改变这一点,什么都不会发生: while IFS=: read -r special 做 txt=$(printf "txt" | sed 's/$special/ /g') done
这个循环有什么问题?
解决方法
此作业不需要
sed
(或任何其他外部实用程序或循环)。您可以使用内置的 bash
参数扩展:
var=${var//[$'\xe1\xe2\xc3']/ }
将立即完成工作。
更新评论后“但是如果你需要更改很多特殊字符(大约 50 个)我想将它们保存在一个文件中,所以如果我添加添加一个我不需要更改程序,只需更改文件"
一种方法是在名为 spchars
和 spchars=$'\xe1\xe2\xc3'
的文件中定义一个变量,例如 special_characters
,作为 source
到您的脚本中:
. special_characters
var=${var//[$spchars]/ }
那么您就不需要修改脚本,只需修改文件 spchars
中的参数 special_characters
。