<分区>
我希望程序可以删除从标准输入读取的标点符号 我的代码是:
echo $* | tr -d '[:punct:]'
它可以处理一些简单的情况,但是当我在终端中输入输入时(比如:不管是什么广告!)
当句子内连续几个标点时,终端会反射(reflect)结果:-bash: !": event not found
有人可以帮忙吗?
标签 bash
<分区>
我希望程序可以删除从标准输入读取的标点符号 我的代码是:
echo $* | tr -d '[:punct:]'
它可以处理一些简单的情况,但是当我在终端中输入输入时(比如:不管是什么广告!)
当句子内连续几个标点时,终端会反射(reflect)结果:-bash: !": event not found
有人可以帮忙吗?
最佳答案
应该使用单引号来避免扩展,例如
echo 'whatever ad!' | tr -d '[:punct:]'
在 bash shell 下它打印出来
whatever ad
如果你想使用变量
BUFF='whatever ?_-!!!!ad!'; echo "$BUFF" | tr -d '[:punct:]'
编辑 1
这是根据您的要求编写的完整脚本
#!/bin/sh
functionStripAndPrint()
{
echo "$@" | tr -d '[:punct:]'
}
functionStripAndPrint "$@"
假设此脚本存储在stripchars.sh
文件中,您可以像这样调用它
./stripchars.sh 'das !adsa _sda ssad-'
它会打印
das adsa sda ssad
编辑 2
您可以使用 set
解决一些特殊字符的解释问题,例如
set +H
停用 the H
option它链接到 !
符号,所以现在 !
只是一个没有特殊含义的感叹号。然后你可以稍微简化你的调用
./stripchars.sh sdfsa!fdsaf?\'
如您所见,此时唯一的问题是仍然需要转义的 '
。
如果你想重新启用你做的H
set -H
set
可以很方便地修改您的 shell 的行为,我不知道在您的情况下是否值得,该 shell 对于一些基本的东西来说很好而且很方便,但我不知道如果这能满足您的需求,您知道的更多,看看 set
看看是否足够。
关于bash - 删除标点符号标准输入。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23509186/