Answers:
&
在替换文本中是特殊的:它表示“输入中与模式匹配的整个部分”,因此您在此处所做的替换user=&uidX
为user=user=&uidXsysuserid.
。要在替换文本中插入实际的“&”号,请使用\&
。
另一个看起来不对的地方是,.
搜索模式中的任何字符都代表字符(换行符除外),但是.
替换文本的末尾是文字点。如果您只想替换文字字符串user=&uid.
,请.
用反斜杠保护。
sed -e 's/user=&uid\./user=\&sysuserid./g'
如果要替换任何一个字符并将其保留在结果中,请将该字符放在一个组中,并\1
在替换中使用以引用该组。
sed -e 's/user=&uid\(.\)/user=\&sysuserid\1/g'
实际上,考虑到原始文本和替换文本之间的重复,您仍然应该使用组:
sed -e 's/\(user=&\)u\(id\.\)/\1sysuser\2/g'
即“替代u
由sysuser
之间user=&
和id.
”。
\(user=&\)
,一个模式user&
将匹配字符串匹配并存储为一个组(组号为1,因为它是该模式中的第一个组)。然后,在替换\1
被存储组号1中的字符串替代
=
正则表达式和替换文本代表自身,所以user=&
只匹配user=&
,并且user=&
在替换文本的产量user=
,然后通过正则表达式匹配线的一部分。
=
字符没有任何特殊含义。user=&
在替换文本中产生user=
后跟原始匹配文本。user=\&
在替换文字中产生user=&
&
是一个特殊字符,因此在RHS中使用时需要转义-在您的情况下,您必须运行,'s/user=&uid./user=\&sysuserid./g'
尽管我怀疑您还需要转义LHS中的点以匹配文字点,所以您实际上需要's/user=&uid\./user=\&sysuserid./g'