仅在匹配的字符串行中替换文件中的字符

replace character from file in matched strings lines only

我正在尝试在匹配特定字符串的单行中替换文件中的“$”字符。 在我的例子中,我有一个如下所示的文件

WHENEVER SQLERROR EXIT 1 ROLLBACK;
WHENEVER SQLERROR EXIT 1 ROLLBACK;

SET DEFINE OFF

DECLARE 
g_GITvision varchar2(100) := '$Testversion: 1234 $';
sql code
sql code

我只想从与“g_GITvision”开头匹配的行中删除“$”。 目前已尝试

sed -e 's/\(\^g_GITvision\)$/\' file

如有任何帮助,我们将不胜感激。

您可以使用

sed '/^g_GITvision/s/$//g' file > newfile

这里,

  • /^g_GITvision/ - 查找以 g_GITvision
  • 开头的行
  • s/$//g - 替换该行上的所有 $ 个字符。

看到 online sed demo:

s='WHENEVER SQLERROR EXIT 1 ROLLBACK;
WHENEVER SQLERROR EXIT 1 ROLLBACK;
 
SET DEFINE OFF
 
DECLARE
g_GITvision varchar2(100) := '"'"'$Testversion: 1234 $'"'"';
sql code
sql code'
sed '/^g_GITvision/s/$//g'  <<< "$s"

输出:

WHENEVER SQLERROR EXIT 1 ROLLBACK;
WHENEVER SQLERROR EXIT 1 ROLLBACK;

SET DEFINE OFF

DECLARE
g_GITvision varchar2(100) := 'Testversion: 1234 ';
sql code
sql code