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

Awk 搜索并替换字符串,但保留一些字符,awk,sed,Awk,Sed,我正在处理一个大的CSV文件,我需要在文件中进行一些搜索和替换 存在包含以下文本的随机行: ![](image.png) 我需要将此文本替换为: !image.png! 中间的文本“代码>图像.PNG 在这个例子中,需要精确地保留,它不一定是图像.PNG < /代码>。字符串可以在其自己的行上,也可以是不相关文本行的一部分。封装字符![](和)总是一样的。还有其他的实例、[、]、(和)。有什么建议吗?myfile.txt包含: oneline ![](image.png) other lin

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

存在包含以下文本的随机行:

![](image.png)
我需要将此文本替换为:

!image.png!

中间的文本“代码>图像.PNG <代码>在这个例子中,需要精确地保留,它不一定是<代码>图像.PNG < /代码>。字符串可以在其自己的行上,也可以是不相关文本行的一部分。封装字符

![](
总是一样的。还有其他
的实例
[
]
。有什么建议吗?

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!

您需要为sed搜索“捕获组”和/或“反向引用”。这是sed的核心功能。下面是一个简短教程的示例:。不要让读者猜测您有问题的数据是什么样子的。编辑您的示例,以包括应修改和不应修改的数据示例。如果您包含其他示例数据以提供上下文,则会有所帮助。祝你好运。为什么不干脆
sed/\[\](\([^)]*\))/!\1!/g'
?谢谢@oguzismail这正是我需要的!谢谢你的回复。这与我的想法是一致的,但是,我没有把源文件的细节说得足够清楚。需要更改的字符串几乎从不在行首。他们在某个地方随机穿过这条线。类似于:
引用此图像![](image.png)了解我的意思。
查看这个单词Doc![](file.docx)
如果您发布文件的一部分,会有所帮助;这允许我考虑变体。请发布您的部分文件。
02-10-2018 10:34;开始;这个错误现在发生在一个100次AB CDE的甲板上。对于目标(见附图),所有数据在离群点步骤均为“无值”。它仍然被列为OK(正常)且未失败。见所附甲板AB_12345.zip。推迟到8.0![](image.png)”,“03-10-2018 07:59;用户名3;QA未能满足比尔的要求。”,“08-02-2019 12:05;用户名2;固定在分支机构中。”,“11-02-2019 13:30;用户名4;即使在其下的所有运行均为“无值”的情况下,QA未通过目标给出OK,2019年5月15日12:51;用户名1;现在似乎已修复。\n\n已在RHEL7和Win10上验证。\n\n build 4.010(2018-07-19)“,,,,,,,
![](image.png)字符串的“image.png”部分并不总是具有png文件扩展名。现在,您可以查看答案。