尝试做一个简单的sed替换,但是我对需要逃避的内容感到困惑

时间:2018-11-15 00:05:10

标签: regex shell sed

我有以下字符串:'$'nwnwnwnnn

并想要将其更改为:{ bitset<9>(0bnwnwnwnnn), '$'},

我已经使用它们的方法研究了许多针对不同shell的类似问题,但没有任何效果。我通常在zsh中,但是我可以使用bash或其他shell。

我一直在尝试的一般形式是:

sed -E -i new s/(\'.\')([nw]+)/{ bitset<9>(0b\2), \1},/g thing.txt

它应适用于$以外的任何字符以及nw的任何序列。

我通常对我需要在这里逃脱感到困惑。该站点上的一些答案表示,在替换的第一部分中,它逃避了括号。

我误用了-i吗?

1 个答案:

答案 0 :(得分:1)

如果您使用基本的正则表达式,则需要转义括号以创建捕获组,如果您使用扩展的正则表达式,则不要转义括号。 GNU -E的{​​{1}}选项和标准sed的{​​{1}}选项启用了扩展的正则表达式,因此您无需转义它们。

如果您只想匹配-r而不是允许引号中的任何字符,则需要转义的sed

您需要将整个$命令放在引号中,因为它必须是$命令的单个参数。

使用s///时,通常将sed放在后缀之前。另外,后缀放在原始文件的已保存副本上,而不是您通过更改创建的新文件上,因此-i是一个后缀。

.