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

问题描述

我试图在特定字符串匹配的一行中替换文件中的“$”字符。 就我而言,我有一个如下所示的文件

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