【问题标题】:Using sed command in complex query在复杂查询中使用 sed 命令
【发布时间】:2018-07-08 03:35:05
【问题描述】:

到目前为止,我一直在简单的情况下使用 sed 命令,例如将文件中每一行中的每个数字 123 更改为 456,但现在我必须进行更复杂的查询,我需要帮助。你知道如何使用 sed 命令来解决这个问题吗:

在文件 abc.txt 的每一行中,如果存在集合中的数字 (123, 456, 789) 并且存在数字 4242 将数字 4242 更改为 2424?

【问题讨论】:

  • 将示例输入/输出添加到问题以使其更清晰..例如,您需要检查所有三个或提到的三个数字中的任何一个..它们的顺序等等...以解决使用 sed,检查 gnu.org/software/sed/manual/sed.html#sed-addresses
  • 使用其他工具?尽管sed 是TC,但不应在所有情况下都使用它。 (编辑我可能是错的......)
  • 我只想将 4242 更改为 2424,前提是在行中至少存在一个集合(123、456、789)中的数字

标签: linux bash sed command


【解决方案1】:
sed -e '/123\|456\|789/ s/4242/2424/'

第一部分是“地址”,只有当地址匹配时才会发生以下替换。 \| 表示“或”,它分隔备选方案,因此任何数字都匹配。

【讨论】:

  • 虽然如果该行包含 21234242 并将数字更改为 2132424 它将匹配。
  • @tripleee:这符合规范的一种解释。
  • 确实如此,但如果这不是他们的意思,OP 可能会感到惊讶。
【解决方案2】:

启用扩展正则表达式

sed -E '/(123|456|789)/s/4242/2424/' file

应该这样做。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-08
    • 2021-07-06
    • 2014-12-28
    • 1970-01-01
    • 1970-01-01
    • 2021-03-02
    • 2014-08-03
    相关资源
    最近更新 更多