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= 1
或 date=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字符串爆炸[重复]的主要内容,如果未能解决你的问题,请参考以下文章