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'