【问题标题】:Changing special characters into space将特殊字符更改为空格
【发布时间】:2021-06-09 08:06:48
【问题描述】:

我有一个包含几个特殊字符的变量。现在我想把这些变成空间 如果我一个一个地做,变化就很好 例如txt=$(printf "$txt" | sed 's/\xE2/ /g')

现在要一次全部更改它们,我将所有特殊字符插入到这样的文件中: \xE1 \xE2 \xC3 ...

如果我想通过这样做来改变它,什么都不会发生: 而 IFS=: 读取 -r 特殊 做 txt=$(printf "txt" | sed 's/$special/ /g') 完成

这个循环有什么问题?

【问题讨论】:

  • 要扩展变量 special,您需要将 sed 语句放在双引号中,而不是单引号中,因此 ... "s/$special/ /g"
  • 单引号不展开变量。 Sed 不会扩展变量。
  • 假设模式可能会随着时间而改变(即,不想将模式硬编码到您的解决方案中)看看这个sed solution,它似乎与您尝试的类似做;如果这对您不起作用,请使用原始 txt=... 语句、模式文件的内容(例如,cat specialchar.txt)和 txt 的预期值更新问题,一旦所有替换都已成功执行
  • 你确定这适用于 \xE2 吗?

标签: bash character space


【解决方案1】:

sed(或任何其他外部实用程序或循环)不需要此作业。您可以使用内置的bash 参数扩展:

var=${var//[$'\xe1\xe2\xc3']/ }

将立即完成这项工作。


更新评论后“但是如果你需要更改很多特殊字符(大约 50 个)我想将它们保存在一个文件中,所以如果我添加添加一个我不需要更改程序,只需更改文件”

一种方法是在名为special_characterssource 的文件中定义一个变量,例如spchars,作为spchars=$'\xe1\xe2\xc3',并将该文件放入您的脚本中:

. special_characters
var=${var//[$spchars]/ }

那么你不需要修改你的脚本,只需要修改文件special_characters中的参数spchars

【讨论】:

  • 好的,如果您只有 3 个十六进制特殊字符,这可以正常工作 但是如果您需要更改很多特殊字符(大约 50 个)我想将它们保存在一个文件中,所以如果我添加添加一个我不需要更改程序,只需更改文件
  • @William 您可以阅读更新后的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-10-13
  • 2013-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-19
相关资源
最近更新 更多