使用 sed 插入 \u 的正确方法是什么?

使用 sed 插入 \u 的正确方法是什么?

我正在尝试找到一个包含某些内容\u并向其添加内容的字符串。

例如,

$ echo \user | sed 's/\us/\\usX/' -

正确产生

\usXer

但是,如果我有文件中的内容并将其输入以下代码

$ sed -i 's/\us/\\usX/' test

我明白了

\\usXer

然后,人们可能会认为问题在于转义的反斜杠,并且不需要它。但如果删除它,只会触发的命令的\u(大写)替换。ssed

\u那么,使用插入序列的正确方法是什么sed

答案1

首先,sed 's/\us/…/'不搜索\us;它搜索us.要搜索\us,您需要使用sed 's/\\us/…/'.

如果您正在搜索其中包含特殊字符的字符串,然后添加对此,一个有用的技术是使用字符&来引用您搜索的字符串。所以,举例来说,

$ sed -i 's/\\us/&X/' test

一般来说,&(有时称为“查找内容”)表示模式空间中与搜索字符串匹配的部分。当搜索字符串是非简单正则表达式时,这更有用;例如,

$ echo You say goodbye and I say hello. | sed 's/[gh][a-z]*[eo]/"&"/g'
You say "goodbye" and I say "hello".

就像's/\\usmthing/…/'是搜索的方式一样\usmthing,你需要使用's/…/\\usmthing/'插入的方式\usmthing。例如,

$ 回声嘘 | sed 's/oo/\ulish/'
BLish ←注意\ul被解释为“把'l'进入大写”。

$ 回声嘘 | sed 's/oo/\\ulish/'
布鲁利什

相关内容