【发布时间】:2018-07-14 02:55:08
【问题描述】:
我想弄清楚如何完成一些正则表达式匹配以插入新行。下面的示例输入/输出...
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 等)。感谢任何/所有帮助!
【问题讨论】:
-
用你的字符串测试过,看起来这样可以工作:
sed -re 's/\t+/\n/g' test.txt -
@LuisMuñoz 将为所有选项卡/列添加新行,我只想要标签列中的新行。我测试了您提供的内容,尽管它确实接近(在标签列中的每个选项卡之前添加了新行),但它也破坏了其余数据。
-
您只是想在双引号内用换行符替换制表符吗?
-
@EdMorton 我认为这是一个安全的方案,是的。