【问题标题】:Extract a value from a file从文件中提取值
【发布时间】:2020-09-06 19:18:15
【问题描述】:

我有一个文件有很多行,其中一个是:

COMPOSER_HOME=/home/glen/.composer

我想在我的 shell 脚本中从这个文件中提取字符串 /home/glen/.composer。我该怎么办?

我可以用grep 得到整行,但不知道如何删除第一部分。

【问题讨论】:

  • 如果你文件中的其他行也是这样的结构:source your_file; echo "$COMPOSER_HOME"?

标签: linux bash shell grep


【解决方案1】:

这里:

grep 'COMPOSER_HOME=' file| cut -d= -f2

cut 由分隔符 = 切割,第二部分将是 = 之后的任何内容,例如:/home/glen/.composer,使用 -f1,您将得到 COMPOSER_HOME

【讨论】:

  • 这可行,但显然编号从 1 开始,所以 -f2 有效。
【解决方案2】:

既然你标记了,你就有了包含PCRE的GNU grep

grep -oP 'COMPOSER_HOME=\K.+' file

\K 表示匹配前面的内容,然后将其丢弃并在该行的其余部分进行操作。

你也可以使用awk

awk -F "=" '$1 == "COMPOSER_HOME" {print $2}' file

【讨论】:

  • 我喜欢你的 grep-only 解决方案!
【解决方案3】:

也许这就够了

sed -nE 's/COMPOSER_HOME=(.*)/\1/p' your_file

它不会打印任何行,除非您明确请求它 (-n),它匹配以 COMPOSER_HOME= 开头的行并捕获(.*) 后面的内容(使用() 而不是\(\),感谢@ 987654327@),并且只替换捕获的内容。然后请求打印带有substitution 命令的p 标志的行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-30
    • 1970-01-01
    • 1970-01-01
    • 2021-02-25
    相关资源
    最近更新 更多