2

我应该如何使用'sed'命令来查找和替换给定的单词/单词/句子而不将它们中的任何一个视为特殊字符?

换句话说,热将查找和替换参数视为纯文本。

在以下示例中,我想用 '+sagar' 替换 'sagar' 然后我必须给出以下命令

sed "s/sagar/\\+sagar@g"

我知道 \ 应该用另一个 \ 转义,但我不能做这个操作。因为有很多特殊字符和它们的组合。

我将从用户屏幕获取查找和替换参数作为输入。我想从 c# 代码执行 sed。

简单地说,我不想使用 sed 的正则表达式。我希望我的命令文本被视为纯文本?

这可能吗?如果是这样,我该怎么做?

4

1 回答 1

1

虽然可能有一些sed版本具有类似的选项--noregex_matching,但它们中的大多数都没有该选项。因为您通过提示用户来获取搜索和替换输入,所以最好的办法是扫描用户输入字符串以查找 reg-exp 特殊字符并酌情转义它们。

此外,您的用户是否会期望他们的全部大写搜索输入正确匹配并替换小写或混合大小写字符串?在这种情况下,请记住您可以将其目标字符串重写为[Ss][Aa][Gg][Aa][Rr],并替换为+Sagar

请注意,替换端使用的正则表达式字符要少得多,“&”表示“匹配的完整字符串”,然后是编号的替换组,如\1,\2,.... 鉴于用户不知道或不期望他们可以使用此类字符,他们使用\1所需替换的可能性非常低。更有可能它们可能对 有有效用途&,因此您必须(至少)扫描并替换为\&. 在基本的 sed 中,就是这样。(在最新的 gnu sed 中可能还有其他的,或者一些sed起源于 PC 工具的 s)。

对于替换字符串,您根本不必转义+字符。可能是的\。同样,您可以扫描用户的“幼稚”输入,并根据需要添加转义字符。

最后,如果您要为将要分发的“包”执行此操作,并且您将依赖用户的sed. ,以及其他,尤其是super-sed,(我很确定)作为 PC 独立设备开始,并且具有非常不同的功能集。

IHTH。

于 2012-12-24T17:21:07.527 回答