搜索和替换字符串,但保留一些字符
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 标记,但保留文本并用自定义标记重新换行
替换一些文本后保留 HTML 格式(使用 PHP 和 JS)