linux - 使用shell脚本从字符串中提取信息

标签 linux bash shell

我有一个包含以下格式行的文本文件:

9999.0      @str:Attribute|ID=foo_1|SendingTime=2015-07-24 05:12:12.123|S-Id=9999|IDSource=Test_3|Qty=1555

据此,我想使用 shell 脚本从每一行中获取各个部分。比如说:

VAR1 = Attribute,
VAR2 = Date,
VAR3 = timeStamp,
VAR4 = Qty

主要问题是信息以不同的顺序出现,有些信息在每一行中有更多/更少不需要的数据。所以拆分成一个数组不会削减它。

最佳答案

grepPerl 正则表达式的示例:

#!/bin/bash
s="9999.0      @str:Attribute|ID=foo_1|SendingTime=2015-07-24 05:12:12.123|S-Id=9999|IDSource=Test_3|Qty=1555"
var1="$(echo "$s" |grep -oP "(?<=@str:)[^|]*")"        # @str:
var2="$(echo "$s" |grep -oP "(?<=SendingTime=)[^|]*")" # SendingTime=
var3="${var2#* }"                                      # Date
var2="${var2% *}"                                      # timestamp
var4="$(echo "$s" |grep -oP "(?<=Qty=)[^|]*")"         # Qty
echo "$var1 | $var2 | $var3 | $var4"

输出:

Attribute | 2015-07-24 | 05:12:12.123 | 1555

关于linux - 使用shell脚本从字符串中提取信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31183540/

相关文章:

linux - Gstreamer,如何将输出路由到文件而不是帧缓冲区

linux - 桌面环境变量与终端不同?

android - 我可以在我的 Android 设备上自动安装应用程序吗?

bash - Shell 重定向 i/o 顺序

c - ‘=’ token 之前出现错误 : expected ‘,’ , ‘;’ 、 ‘asm’ 、 ‘__attribute__’ 或 ‘{’

linux - 如何对 Mutt 进行编程以在收到新电子邮件时采取行动?

linux - 在 crontab 中带有 -f 标志的 pkill 在分号后不运行命令

c - watchdog_fire 中的 usermodehelper API 调用

linux - 如何在 bash 脚本中递归地执行 foreach *.mp3 文件?

Windows 10 在 Bash Ubuntu 中打开目录