【发布时间】:2018-11-02 05:09:48
【问题描述】:
假设我有一个名为 inputFile 的文件,看起来像这样:
blahblah token substring token something else token substring2 token
整个文件只包含 1 长行。
我想用 sed (substring,substring2) 提取标记之间的子字符串。
此时我有:
[sed "s/^.* \?token\(.* \)token.* \?/\1/"][1] inputFile > outputFile
我根据这些问题尝试这样做,但不幸的是它只返回最后一个子字符串
Extract lines between 2 tokens in a text file using bash
How to replace multiple patterns at once with sed?
How to select lines between two patterns?
有解释的答案会很棒。
更新 实际输入代码:
<archive><message id="0"><receiver>apr</receiver><sender>gtr</sender><text>52333</text><sendTime>554</sendTime><deliveryTime>765</deliveryTime></message><message id="0"><receiver>apr</receiver><sender>gtr</sender><text>4332</text><sendTime>764</sendTime><deliveryTime>922</deliveryTime></message></archive>
预期输出:
apr gtr 52333
apr gtr 4332
【问题讨论】:
-
开头不是缺少
<archive>吗? -
你必须添加在什么基础上输出到达..另外,如果它是有效的 xml,使用像 xmlstarlet 这样的 xml 解析器或带有 xml 模块的编程语言..
-
@kvantour 是的,确实
-
@MariuszBakun 我已经用提供请求输出的
xmlstarletcmd 更新了我的答案。
标签: xml bash sed xmlstarlet