bash - 删除标点符号标准输入。

标签 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/

相关文章:

bash - 如何在导入期间对 pg_dump 数据运行过滤器?

ZSH 和 Oh-My-Zsh 本地环境映射?

linux - 在多个目录中查找文件

Fortran 代码的 Bash 包装器

linux - Bash If 语句 - 放弃希望

bash - unix:循环查找命令的结果

php - 试图从 php 脚本 : returns a pid but doesn't execute 运行 python 脚本

bash - 同步 : Recursively sync multiple file types while ignoring directory structure

python - 如何找出两个随机排列的文本文件中未排序行之间的区别?

bash - 如何从最后一个字段作为变量的bash调用awk