我应该如何使用' sed'命令找到并替换给定的单词/单词/句子而不将其中任何一个视为特殊字符?
换句话说,热处理查找和替换参数作为纯文本。
在下面的示例中,我想要替换sagar'用' + sagar'然后我必须给出以下命令
sed "s/sagar/\\+sagar@g"
我知道\应该用另一个\来逃脱,但是我无法进行这种操作。 因为有这么多特殊字符和他们的组合。
我将把查找和替换参数作为用户屏幕的输入。 我想从c#代码执行sed。
简单地说,我不想要使用sed的正则表达式。我希望我的命令文本被视为纯文本?
这可能吗? 如果是这样我该怎么办?
答案 0 :(得分:1)
虽然sed
个版本可能有--noregex_matching
这样的选项,但大多数版本都没有此选项。因为您通过提示用户来获取搜索和替换输入,所以最好的办法是扫描用户输入字符串以查找reg-exp特殊字符并在适当时将其转义。
此外,您的用户是否期望例如,他们的全部大写搜索输入能够正确匹配并替换较低或混合大小写的字符串?在这种情况下,请回想一下,您可以将目标字符串重写为[Ss][Aa][Gg][Aa][Rr]
,并替换为+Sagar
。
请注意,替换方使用的正则表达式字符数量要少得多,“&”意思是“匹配的完整字符串”,然后是编号的替换组,如\1,\2,...
。如果用户不知道或期望他们可以使用这些角色,那么他们在所需替换中使用\1
的可能性非常低。他们更有可能对&
有效使用,因此您必须(至少)扫描并替换为\&
。在基本的sed中,就是这样。 (在最新的gnu seds中可能还有其他一些,或者有一些sed
具有PC工具的起源。
对于替换字符串,您根本不必转义+
字符。 \
可能是肯定的。同样,您可以扫描用户的“天真”输入,并根据需要添加转义字符。
最后,如果您正在为要分发的“软件包”执行此操作,并且您将依赖于用户的sed
版本,请注意有许多版本的sed浮动,一些它们的根源在于Unix / Linux,其他的,特别是super-sed
,它们(我很确定)已经开始作为PC-standalones而且具有非常不同的功能集。
IHTH。