Bash Unix删除所有出现的字符并保存

Bash Unix删除所有出现的字符并保存,bash,shell,unix,Bash,Shell,Unix,如何删除文件中所有出现的字符串“?”并保存它 我目前的做法是: cat file.txt | sed -ie '/s/???//' file.txt 但是,我得到以下错误: sed: -e expression #1, char 4: unknown command: `?' 您可以使用此sed命令: sed -i 's/???//g' file.txt 这里没有理由使用cat,因为sed可以直接操作文件并在线保存 还请注意,与其他正则表达式不同,BRE(基本正则表达式)这是sed的默认正

如何删除文件中所有出现的字符串“?”并保存它

我目前的做法是:

cat file.txt | sed -ie '/s/???//' file.txt
但是,我得到以下错误:

sed: -e expression #1, char 4: unknown command: `?'

您可以使用此
sed
命令:

sed -i 's/???//g' file.txt
这里没有理由使用
cat
,因为
sed
可以直接操作文件并在线保存


还请注意,与其他正则表达式不同,BRE(基本正则表达式)这是sed的默认正则表达式引擎,它不将
视为一个特殊的正则表达式元字符,因此这里不需要转义

@anubhava它的文件内容的一部分,然后使用:
sed's/???//g'file.txt
@anubhava请添加这一点作为答案,强调
cat|:)。这就是我要贡献的全部,不值得一个答案。谢谢<当您不将文件作为参数时,code>sed
从stdin(管道
|
)读取数据。您可以删除管道之前的零件(以及
/s/???/
中的第一个
/
)。我认为不仅不需要避开问号,甚至不可以避开问号。我在sed方面没有太多经验,但从我得出的结论来看,将问号转义(前缀为反斜杠),实际上可以将其转换为regexp运算符;至少这适用于GNU sed。是的,对于GNU sed,我们不能在默认BRE模式下逃避问号。