regex - 在 TSV 的匹配之前/之后插入换行符

标签 regex bash perl awk sed

我正在努力弄清楚如何完成一些正则表达式匹配以插入新行。下面的示例输入/输出...

示例 TSV 数据:

Name    Monitoring  Tags
i-RBwPyvq8wPbUhn495 enabled "some:tags:with:colons=some:value:with:colons-and-dashes/and/slashes/yay606-values-001  some:other:tag:with-colons-and-hypens=MACHINE NAME  Name=NAMETAG    backup=true"
i-sMEwh2MXj3q47yWWP enabled "description=RANDOM BUSINESS INT01  backup=true Name=SOMENAME"

期望的输出:

Name    Monitoring  Tags
i-RBwPyvq8wPbUhn495 enabled "some:tags:with:colons=some:value:with:colons-and-dashes/and/slashes/yay606-values-001
some:other:tag:with-colons-and-hyphens=MACHINE NAME 
Name=NAMETAG    
backup=true"
i-sMEwh2MXj3q47yWWP enabled "description=RANDOM BUSINESS INT01  
backup=true 
Name=SOMENAME"

我可以保证这些引号中的每个 key=value 都由硬制表符/文字制表符分隔,尽管 StackOverflow 代码块在 HTML 中的显示方式可能不会出现这种方式,但它们确实转移到了在代码块编辑器中,Tags 列下的数据用引号引起来,因此即使它们以制表符分隔,它们仍位于 Tags 列中。无论出于何种原因,我都无法成功获得所需的结果。

在我微不足道的尝试中,我基本上捕获了 "" 之间的所有内容,就好像由于我使用了通配符 [TAB],制表符在我的正则表达式搜索中没有分开。 *=.*[TAB] 显然不起作用,因为那样我就失去了每行第一次/最后一次出现之间的所有内容。我曾尝试将它们存储在捕获组中,但没有成功。

我正在寻找一个 unix 工具集解决方案(sed、awk、perl 等)。感谢任何/所有帮助!

最佳答案

这将在任何 UNIX 机器上的任何 shell 中使用任何 awk 工作:

$ awk 'match($0,/".*"/){str=substr($0,RSTART,RLENGTH); gsub(/\t/,"\n",str); $0=substr($0,1,RSTART-1) str substr($0,RSTART+RLENGTH)} 1' file
Name    Monitoring      Tags
i-RBwPyvq8wPbUhn495 enabled "some:tags:with:colons=some:value:with:colons-and-dashes/and/slashes/yay606-values-001
some:other:tag:with-colons-and-hypens=MACHINE NAME
Name=NAMETAG
backup=true"
i-sMEwh2MXj3q47yWWP enabled "description=RANDOM BUSINESS INT01
backup=true
Name=SOMENAME"

它只是从当前记录中提取 " 之间的字符串,用该字符串中的换行符替换所有制表符,然后在打印之前将记录放回原处。

关于regex - 在 TSV 的匹配之前/之后插入换行符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48602451/

相关文章:

c# - 正则表达式 - 为什么命名组位于组数组的末尾?

bash - 如果找到数字,如何按模式在 bash 中拆分文件

java - 替换每个序列末尾的数字

regex - QML RegExpValidator 验证的最大字符串长度

bash - 读取 makefile 中的文件

从 stdin 读取时,python 交互模式不起作用

perl - 在文本文件中编辑/分割/保存数据

regex - 如何正确解析 Perl 中的正则表达式?

perl - 为用 perl 编写的应用程序构建 .deb 安装文件的常用工具是什么?

regex - Xpath在链接文本中获取文本