Sed:忽略句点字符

Sed:忽略句点字符

我知道我可以匹配句点,\.但通过反复试验,我似乎仍然无法让我的模式忽略句点字符。

我尝试过各种变体,例如:

\[^.] \[^.]+

我想要这样的代码

foo("some text").arg("more text");

保持不变,而代码如

foo("some text");

匹配一个模式并用其他东西替换

另外,我遇​​到了另一个问题

一个案例比如:

tr("I am some text") .arg(i do stuff) .arg(I also do stuff) 需要处理 2 到 n 行。

我希望保留此类文本,因为截至目前, tr 将被删除并会导致语法错误。

答案1

要成为“非句点”,那么序列[^.]就是您想要的。在您的示例中,您\前面有一个[,这是错误的。

因此,例如:

foo("some text").arg("more text");
foo("some text");

% sed 's/foo("some text")[^.]/replaced text/' tstfile
foo("some text").arg("more text");
replaced text

请注意,这也替换了 后面的字符foo(..)。如果你想保留它,那么我们可以记住它:

% sed 's/foo("some text")\([^.]\)/replaced text\1/' tstfile
foo("some text").arg("more text");
replaced text;

相关内容