Linux sed不会删除单个报价

Linux sed不会删除单个报价,linux,sed,Linux,Sed,我试过几种不同的格式,但都不管用。如有任何协助,将不胜感激: [root@home:/home/users/jlefler]$ sed "s/[',#,`,@]//g" stage_data.out > stage_data > ^C [root@home:/home/users/jlefler]$ sed "s/[\',#,`,@]//g" stage_data.out > stage_data > ^C [root@home:/home/users/jlefler]$

我试过几种不同的格式,但都不管用。如有任何协助,将不胜感激:

[root@home:/home/users/jlefler]$ sed "s/[',#,`,@]//g" stage_data.out > stage_data
> ^C
[root@home:/home/users/jlefler]$ sed "s/[\',#,`,@]//g" stage_data.out > stage_data
> ^C
[root@home:/home/users/jlefler]$ sed "s/[#,`,@,\\']//g" stage_data.out > stage_data
> ^C
让我们问问:

倒勾是问题所在,而不是单一的报价。逃避它吧:

sed "s/[',#,\`,@]//g" stage_data.out > stage_data
下面是一个实际的例子:

$ echo "'#@foo" > stage_data.out
$ sed "s/[',#,\`,@]//g" stage_data.out > stage_data
$ cat stage_data
foo
让我们问问:

倒勾是问题所在,而不是单一的报价。逃避它吧:

sed "s/[',#,\`,@]//g" stage_data.out > stage_data
下面是一个实际的例子:

$ echo "'#@foo" > stage_data.out
$ sed "s/[',#,\`,@]//g" stage_data.out > stage_data
$ cat stage_data
foo

您的问题是由
sh
引起的,而不是由
sed
引起的

双引号仍然允许某些特殊字符具有特殊含义,例如
$
,在本例中是
`

这项工作:

echo "a'b'c" | sed -e "s/['#\`@]//g"

或者,您可以通过将模式粘贴到文件中并使用
sed-f

来避免所有与shell相关的问题。您的问题是由
sh
引起的,而不是由
sed
引起的

双引号仍然允许某些特殊字符具有特殊含义,例如
$
,在本例中是
`

这项工作:

echo "a'b'c" | sed -e "s/['#\`@]//g"
或者,您可以通过将模式粘贴到文件中并使用
sed-f

来避免所有与shell相关的问题,尝试以下方法:

sed "s/[',#,\`,@]//g"
试试这个:

sed "s/[',#,\`,@]//g"

您不需要逗号来分隔
[]
类中的项目,这将添加要匹配的文字逗号。您不需要逗号来分隔
[]
类中的项目,这将添加一个要匹配的文字逗号。backtick不是问题-表达式在不包含单引号的情况下可以工作。@user3299633在使用backquote但没有单引号的情况下不适用于我。但是您还没有粘贴任何使用该大小写的代码。@user3299633请确保您能够区分单引号
和反勾号
之间的区别。它们看起来非常相似——在某些字体中几乎相同——但它们不是同一个字符。背面的记号向后倾斜,这绝对是问题的原因,而单引号是直的,在这里并不重要。我加了一个例子。请尝试复制粘贴它并亲自查看。backtick不是问题-表达式在不包含单引号的情况下可以工作。@user3299633在包含backquote但没有单引号的情况下不适用于我。但是您还没有粘贴任何使用该大小写的代码。@user3299633请确保您能够区分单引号
和反勾号
之间的区别。它们看起来非常相似——在某些字体中几乎相同——但它们不是同一个字符。背面的记号向后倾斜,这绝对是问题的原因,而单引号是直的,在这里并不重要。我加了一个例子。请尝试复制粘贴并亲自查看。最好解释为什么你的答案有效,而不仅仅是粘贴代码。最好解释为什么你的答案有效,而不仅仅是粘贴代码。