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

Posted

技术标签:

【中文标题】仅在匹配的字符串行中替换文件中的字符【英文标题】:replace character from file in matched strings lines only 【发布时间】:2021-05-01 15:24:48 【问题描述】:

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

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

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

【问题讨论】:

【参考方案1】:

你可以使用

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

【讨论】:

以上是关于仅在匹配的字符串行中替换文件中的字符的主要内容,如果未能解决你的问题,请参考以下文章

比较多列并仅在匹配时替换

无法匹配和替换文本文件中的 " 和 ' 字符

查找和替换文件中与另一个文件中的字符串匹配的子字符串

替换文件中的第 N 个字符串匹配项

如何仅在 Oracle SQL 中的字符串开头替换出现?

批处理文件帮助仅在两个匹配字符串之间复制文本