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

我的文件如下所示:

record=123
date=2012.01.20 10:22

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

如何在 bash 中完成?

【问题讨论】:

    标签: bash unix freebsd explode


    【解决方案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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-06
      • 2020-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多