【问题标题】:Unable to parse text from a file using sed?无法使用 sed 解析文件中的文本?
【发布时间】:2015-09-30 21:39:47
【问题描述】:

这是我要从中提取信息的文件中的一行:

backup-initiation-time="00:00" backup-directory-path="/store/backup" backup-retention-period-days="2"

我的命令是:

grep "backup-directory-path" test.txt | sed 's/.*backup-directory-path="\(.*?\)" /\1/'

我只想要/store/backup 就是这样。我不知道我做错了什么。

【问题讨论】:

  • 你要显示它吗?
  • 现在它实际上是脚本的一部分,它将被保存在变量 grep cmd 输出中。

标签: regex sed


【解决方案1】:

您可以使用\K(保持)并且简单地:

grep -oP '.*backup-directory-path=\K([^ ])+'

这将仅显示“保留”之后捕获的部分。

要删除那里的引号,只需修改它:

grep -oP '.*backup-directory-path="\K([^"])+'

【讨论】:

  • 太好了,我也想去掉引号 "。它目前显示在你的 cmd 中。
  • @asad 我不明白你......你能解释一下吗?
  • 要去掉引号,类推grep -oP '.*backup-directory-path="\K([^"])+'
  • @asad 意思是“忽略它之前出现的任何东西,只考虑它之后的组”。
【解决方案2】:

我在 sed 中找不到任何关于非贪婪匹配的文档,所以我不确定这是否已实现。

如果您知道要匹配的最后一个或最后一个字符,则可以使用[^"]*,而不是使用.*? 进行非贪婪匹配,在您的情况下为"

此命令产生预期的输出:

grep "backup-directory-path" test.txt | sed 's|.* backup-directory-path="\([^"]*\)".*|\1|'

【讨论】:

    猜你喜欢
    • 2015-01-12
    • 2016-07-25
    • 2018-03-31
    • 1970-01-01
    • 2014-02-08
    • 2011-12-24
    • 2022-11-30
    • 2021-09-20
    • 2017-06-18
    相关资源
    最近更新 更多