使用 bash 获取部分字符串 [重复]

Posted

技术标签:

【中文标题】使用 bash 获取部分字符串 [重复]【英文标题】:Take part of the string using bash [duplicate] 【发布时间】:2014-12-20 01:15:09 【问题描述】:

我有来自日志文件的关于发送代码的字符串,例如:

 <timestamp> INFO   [Response--22] Code [00000000] Code was sent to [+0000002345]

您能帮我使用 BASH 解析它以将代码值 (8chars) 放入变量中吗? 感谢您的帮助。

【问题讨论】:

你能提供预期的输出吗? 您是否已经尝试过?请详细说明您的目标! 预期输出为:从字符串“ INFO [Response--22] Code [00000000] Code is sent to [+0000002345]”中提取的'code = 00000000' 您应该编辑您的问题以包含预期的输出。 @TomFenech 我希望有更好的工具来查找可能的重复项;如果您可以提出更好的副本,请这样做。可能有数百个,但要找到一个好的是一项艰巨的工作。 【参考方案1】:

您可以使用 sed 提取值:

sed 's/.*Code *\[\([0-9]*\)].*/\1/' <<<"<timestamp> INFO   [Response--22] Code [00000000] Code was sent to [+0000002345]"
00000000

如果该行在文件中,您可以使用sed '...' filename。要将输出存储到变量中,您可以使用x=$(sed '...' filename)

【讨论】:

【参考方案2】:
sed -r 's/(.*)(Code )\[([0-9]+)\](.*)/code = \3/'

输出:

sdlcb@ubuntu:~/AMD_C$ echo "<timestamp> INFO   [Response--22] Code [00000000] Code was sent to [+0000002345]" | sed -r 's/(.*)(Code )\[([0-9]+)\](.*)/code = \3/'
code = 00000000

【讨论】:

【参考方案3】:

如果我正确理解了您的要求:

$ x="<timestamp> INFO   [Response--22] Code [00000000] Code was sent to [+0000002345]"
$ echo "$x" | sed -r 's/.*(Code )\[([0-9]+)\].*/\1= \2/'
Code = 00000000

【讨论】:

你应该在回显时引用"$x" 非常感谢。抱歉转储询问方式。 @TomFenech:感谢汤姆指出。更新【参考方案4】:
x='<timestamp> INFO   [Response--22] Code [00000000] Code was sent to [+0000002345]'
read -a fields <<<"$x"
code=$fields[4]//[][]/
echo "code=$code"

【讨论】:

以上是关于使用 bash 获取部分字符串 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

使用 bash 将字符串附加到文件名 [重复]

在Bash中将字符串拆分为多个变量[重复]

在字符后获取字符串[重复]

通过回声管道将python变量(字符串)传递给bash命令[重复]

bash - 压缩多个文件,从变量中获取参数,其中一个在名称中有空格[重复]

Bash字符串爆炸[重复]