Bash 删除标点符号标准输入。

Bash 删除标点符号标准输入。,bash,Bash,我想该程序可以删除标点,从标准输入读取 我的代码是: echo $* | tr -d '[:punct:]' 它可以处理一些简单的情况,但当我在终端中键入输入时(比如:which ad!”:) 当句子内连续出现几个标点符号时,终端将反映结果:-bash:!“:未找到事件 有人能提供帮助吗?应该使用单引号来避免扩展,例如 echo 'whatever ad!' | tr -d '[:punct:]' 在bash外壳下打印出来 whatever ad 如果你想使用一个变量 BUFF='what

我想该程序可以删除标点,从标准输入读取 我的代码是:

echo $* | tr -d '[:punct:]'
它可以处理一些简单的情况,但当我在终端中键入输入时(比如:which ad!”:)

当句子内连续出现几个标点符号时,终端将反映结果:-bash:!“:未找到事件


有人能提供帮助吗?

应该使用单引号来避免扩展,例如

echo 'whatever ad!' | tr -d '[:punct:]'
在bash外壳下打印出来

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
禁用链接到
的链接符号,所以现在
只是一个感叹号,没有特殊意义。然后可以稍微简化调用

./stripchars.sh sdfsa!fdsaf?\'

正如您所看到的,此时唯一的问题是仍然需要转义的

如果要重新启用
H
,请执行以下操作

set -H

set
可以方便地修改shell的行为,我不知道它在您的情况下是否值得,shell对于一些基本的东西来说是好的和方便的,但是我不知道这是否适合您的需要,您更清楚,请看一看
set
,看看它是否足够。

您可能知道,
bash
使用
从命令历史记录中获取命令。你打字的时候

echo Whatever ad!":
它尝试使用
从其命令历史记录中检索命令!:
。由于找不到任何使用该命令的命令,因此它会打印消息

bash: !": event not found
您可以通过(1)使用单引号将特殊字符视为普通字符,或(2)转义特殊字符,将这些特殊字符传递给
bash

echo 'Whatever ad!":'  | tr -d '[:punct:]' 
echo Whatever ad\!\":  | tr -d '[:punct:]'

您也可以使用sed来代替
tr
,比如
echo'which ad!”:“|sed的//[:punct:]//g”“
$*是我在终端中键入的字符串参数。要编辑的shell脚本名为stripchars的文件以及命令和管道在这个文件中进行编辑,我运行它的方式是./stripchars abc abc可以代替其他字符串。所以我不希望字符串在文件中被编辑。如果字符串包含连续标点符号,您还有其他解决问题的方法吗?如何处理!继续使用另一个标点符号,因为我在terminal中键入的参数是normal ChartText(无论什么广告!”:),删除标点的命令在一个文件中编辑。我想让程序能够解决我键入任何包含连续标点符号的情况,如(!“:”)在终端中直接作为标准输入,不编辑shell脚本文件中的文本。我有一个想法,可以将字符串参数转换为普通字符,但我不知道如何转换。$*是我在终端中键入的字符串参数。用于编辑shell脚本的名为stripchars的文件以及命令和管道都是在中编辑的这个文件,我像这样运行。/stripchars abc abc可以代替其他字符串。因此,我不希望字符串在文件中被编辑。如果字符串包含连续标点符号,您是否有其他解决问题的方法,以及如何正常处理char@JAC看看编辑是否适合你的需要。谢谢你的帮助。但是你没有吗如果字符串的结尾是!”或?,它还显示了-bash:即使没有找到,你有什么方法可以解决这个问题吗problem@JAC我在Ubuntu下使用bash,它可以与任何角色一起工作,我看不出它有什么特别的问题,你如何调用它?请添加更多详细信息。您是否可以不使用单引号来表示字符串,只键入不带引号的字符串,或者您是否知道如何将其转换为我键入的不带引号的字符串