将 sed 与与号 (&) 一起使用

将 sed 与与号 (&) 一起使用

我使用 sed 来查找和替换我拥有的 SAS 文件中的模式,而不是单独更改它们。问题是我试图替换宏变量,当我使用&符号时,它无法正确处理。

Here's my code:
sed -ie 's/user=&uid./user=&sysuserid./g' *_table_*.sas

每当我运行这个命令时,它似乎都会附加原始文本并对其执行各种时髦的操作。

问题:如何使用 sed 命令替换包含 & 符号的文本?

答案1

&在替换文本中很特殊:它意味着“与模式匹配的输入的整个部分”,所以您在这里所做的替换user=&uidXuser=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用andsysuser之间替换”。user=&id.

相关内容