【发布时间】:2016-10-27 04:14:48
【问题描述】:
我有一个包含以下随机主机的大电子邮件文件:
......
HOSTS: test-host,host2.domain.com,
host3.domain.com,another-testing-host,host.domain.
com,host.anotherdomain.net,host2.anotherdomain.net,
another-local-host, TEST-HOST
DATE: August 11 2015 9:00
.......
主机总是用逗号分隔,但它们可以分成一行、两行或多行(我无法控制这一点,很遗憾,这是电子邮件客户端所做的)。
所以我需要提取字符串“HOSTS:”和字符串“DATE:”之间的所有文本,将其换行,并用新行替换逗号,如下所示:
test-host
host2.domain.com
host3.domain.com
another-testing-host
host.domain.com
host.anotherdomain.net
host2.anotherdomain.net
another-local-host
TEST-HOST
到目前为止,我想出了这个,但我失去了与“HOSTS”同一行的所有内容:
sed '/HOST/,/DATE/!d;//d' ${file} | tr -d '\n' | sed -E "s/,\s*/\n/g"
【问题讨论】:
-
您的错误是
//不像您(我认为)假设的那样只匹配空行。请改用/^$/d或/./!d。你最终会得到比你想要的更多的文本,但我认为你可以从那里得到它......