我正在尝试找到一个包含某些内容\u
并向其添加内容的字符串。
例如,
$ echo \user | sed 's/\us/\\usX/' -
正确产生
\usXer
但是,如果我有文件中的内容并将其输入以下代码
$ sed -i 's/\us/\\usX/' test
我明白了
\\usXer
然后,人们可能会认为问题在于转义的反斜杠,并且不需要它。但如果删除它,只会触发的命令的\u
(大写)替换。s
sed
\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/' 布鲁利什