Duk*_*uke 35 sed quoting replace
我正在使用 sed 来查找和替换我拥有的 SAS 文件中的模式,而不是单独更改它们。问题是我试图替换宏变量,当我使用&符号时,它没有正确处理。
Here's my code:
sed -ie 's/user=&uid./user=&sysuserid./g' *_table_*.sas
Run Code Online (Sandbox Code Playgroud)
每当我运行此命令时,它似乎都会附加并使用原始文本执行各种时髦的操作。
问题:如何使用 sed 命令替换包含与号的文本?
Gil*_*il' 37
&
在替换文本特殊:它的意思,所以你在这里做替代“是由模式匹配的输入的整个部分”user=&uidX
用user=user=&uidXsysuserid.
。要在替换文本中插入实际的与号,请使用\&
。
另一件看起来不对的事情是.
在搜索模式中代表任何字符(换行符除外),但.
替换文本的末尾是一个文字点。如果您只想替换文字 string user=&uid.
,请.
使用反斜杠保护。
sed -e 's/user=&uid\./user=\&sysuserid./g'
Run Code Online (Sandbox Code Playgroud)
如果要替换任何一个字符并将其保留在结果中,请将字符放在一个组中并\1
在替换中使用以引用该组。
sed -e 's/user=&uid\(.\)/user=\&sysuserid\1/g'
Run Code Online (Sandbox Code Playgroud)
事实上,考虑到原文和替换之间的重复,你无论如何都应该使用组:
sed -e 's/\(user=&\)u\(id\.\)/\1sysuser\2/g'
Run Code Online (Sandbox Code Playgroud)
即“u
由和sysuser
之间替换”。user=&
id.