Bash字符串爆炸[重复]

Posted

技术标签:

【中文标题】Bash字符串爆炸[重复]【英文标题】:Bash string explode [duplicate] 【发布时间】:2012-02-15 02:53:01 【问题描述】:

我的文件如下所示:

record=123
date=2012.01.20 10:22

在 bash 文件中我执行cat myfile.ini,然后我需要使用类似explode 之类的东西,因为我只需要grep 123 数字记录数据,不需要其他任何东西。

如何在 bash 中完成?

【问题讨论】:

【参考方案1】:
awk -F'=| ' '/record/ print $2'

在上面的命令中用“date”代替“record”来得到日期(时间应该是$3)。

这个键是变量的名称,而不是依赖于值的正则表达式匹配。它使用空格或等号作为字段分隔符。

【讨论】:

不错,但如果记录(或日期)中有空格,它就不起作用。 fe:record= 1date=2012-01-20 16:30 @Cyclone:我描述了日期和时间用空格分隔的情况(如问题所示)。如果输入文件不是“格式正确”,它确实会失败。如果你想把日期和时间放在一起,你可以使用-F'='【参考方案2】:

如果您可以控制 ini 文件,请将其重写为:

record=123
date="2012.01.20 10:22"

然后在你的“bash 文件”中做

. myfile.ini

echo $record

这是典型的方法。 (如果你可以控制 ini 文件

【讨论】:

只要您对文件有控制权。因为在某些情况下,这种方法可能存在安全隐患(因为文件中的任何命令都会被执行)。【参考方案3】:

你可以使用:

#!/bin/sh
VALUE="`grep '^record=' myfile.ini |sed 's/[^0-9]//g'`"

【讨论】:

如果可能有多个 "record=" 行并且您只想要第一行,请执行 VALUE="grep '^record=' myfile.ini | head -1 | sed 's/[^0-9]//g'" 谢谢,工作正常,你能告诉我,我怎样才能 grep date= 符号后面的日期?【参考方案4】:

你可以这样做:

awk '/=[0-9]+$/' file.txt

在标准输出上仅打印 = 符号后带有数字内容的行

但是,如果您只想将 123 捕获到变量中,那么您可以使用:

val=$(awk -F"=" '/=[0-9]+$/print $2' file.txt)

【讨论】:

以上是关于Bash字符串爆炸[重复]的主要内容,如果未能解决你的问题,请参考以下文章

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

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

在bash字符串中写入特殊字符[重复]

如何检查字符串是不是包含子字符串并且在 Bash 中不包含 [重复]

Bash将命令输出与字符串进行比较[重复]

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