搜索和替换字符串,但保留一些字符

Posted

技术标签:

【中文标题】搜索和替换字符串,但保留一些字符【英文标题】:Search and replace string, but retain some characters 【发布时间】:2020-01-14 14:25:41 【问题描述】:

我正在处理一个大型 CSV 文件,我需要在文件中进行一些搜索和替换。

有随机行包含如下文本:

![](image.png)

我需要将此文本替换为:

!image.png!

中间的文本,在本例中为image.png,需要完全保留,并不总是image.png。字符串可以单独一行,也可以是不相关文本行的一部分。封装字符![]() 始终相同。 ![]() 的其他实例无法更改。有什么建议吗?

【问题讨论】:

您需要在 sed 上搜索“捕获组”和/或“反向引用”。这是 sed 的核心功能。这是一个简短教程的示例:riptutorial.com/sed/example/8893/backreference. 不要让读者猜测您有问题的数据是什么样的。编辑您以包含应该修改和不应该修改的数据样本。如果您包含其他示例数据以提供上下文,这将有所帮助。祝你好运。 为什么不只是sed 's/!\[\](\([^)]*\))/!\1!/g' 谢谢@oguzismail 这正是我所需要的! 【参考方案1】:

myfile.txt 包含:

oneline
![](image.png)
other line
![](image2.png)
another line
Reference this image ![](image.png) to see what I mean.
Check out this Word Doc ![](file.docx)
another line

使用这个 awk 程序:

 gawk ' match($0, /!\[\]\(([a-z0-9_]+.[a-z]+)/, arr); if(arr[1] != "") print "!"arr[1]"!" ' myfile.txt

你会得到这个输出:

!image.png!
!image2.png!
!another.png!
!image.png!
!file.docx!

【讨论】:

感谢您的回复。这与我的想法一致,但是,我没有使源文件的细节足够清楚。需要更改的字符串几乎从不在行首。他们在某个地方随机通过线路。类似:Reference this image ![](image.png) to see what I mean.Check out this Word Doc ![](file.docx) 如果您发布文件的一部分会有所帮助;这让我可以考虑变体。请张贴您的文件的一部分。 02-10-2018 10:34;began;This bug occurs now with a deck with a 100 run AB CDE. For a target (see attached image) with all data at the outlier step are "No Value". it is still listed as OK and not failed. See attached deck AB_12345.zip. Postpone to 8.0. ![](image.png)","03-10-2018 07:59;username3;QA-failed per Bill's request.","08-02-2019 12:05;username2;Fixed in branch.","11-02-2019 13:30;username4; QA Failed Target given OK even when all runs under it have "No Value"","15-05-2019 12:51;username1;Seems to be fixed now.\n\nValidated on RHEL7 and Win10.\n\nBuild 4.010(2018-07-19)",,,,,,, ![](image.png) 字符串的“image.png”部分并不总是具有 png 文件扩展名。 现在,您可以查看答案了。

以上是关于搜索和替换字符串,但保留一些字符的主要内容,如果未能解决你的问题,请参考以下文章

替换字符串中的 html 标记,但保留文本并用自定义标记重新换行

如何在 Notepad++ 中搜索、替换和保留大小写?

替换一些文本后保留 HTML 格式(使用 PHP 和 JS)

Python替换引号内的',',但保留其他逗号,然后删除字符串中的引号

sed ack 搜索/用字符串替换换行符

如何使用python搜索和替换DOTM文件中的字符串