【发布时间】:2021-07-19 21:52:24
【问题描述】:
我尝试使用下面的 awk 和 sed 实用程序来解析仅在引号内的匹配模式,但它占用了整行。
代码:
awk '/''/ { print }' parse.xml
输入
<msg time='005-04:00' org_id='oracle' comp_id='lsnr'
type='UNKNOWN' level='16' host_id='localhost'
host_addr='127.0.0.1' pid='6322'>
<txt>05:34:54 * service_update * orclcdb * 0
</txt>
</msg>
期待输出
Time Org_id Comp_id Type Level Host_id Host_addr Pid Txt
----- ------- ------- ----- ----- ------- --------- ---- ---
005-04:00 oracle lsnr UNKNOWN 16 localhost 127.0.0.1 6322 05:34:54 * service_update * orclcdb * 0
【问题讨论】:
-
我认为使用 xml 解析器解析 xml 会更好。至于在单引号之间取出内容,您可以使用 awk 将单引号拆分并打印出每隔一列:
awk -F"'" '{for (i=2;i<=NF;i=i+2){print $i}}'如果您的引号字符串跨越多行,或者如果您还需要保留<msg>,这会变得更丑陋标记它们作为单行包含在其中,并且您还需要获取<txt>标记的内部文本...您添加的每一点都会使它变得越来越丑陋,直到您使用 xml 解析器来获得您的恢复理智。 -
您的问题标题
text processing using awk or sed是不好的,正如它告诉我们的那样,任何有类似问题的人将来都会在档案中搜索解决方案,而与您的实际问题无关。请解决这个问题。 -
你认为 shell 会如何解析
awk '/''/ { print }' parse.xml,为什么你认为它与awk '// { print }' parse.xml有什么不同?