【问题标题】:Changing values with grep or sed使用 grep 或 sed 更改值
【发布时间】:2012-11-19 17:21:49
【问题描述】:

我可以用 grep/sed 增加 txt 文件中的一些数字吗?

我想查找文件中的所有数字并将它们增加 5。grep 和 sed 是否可以实现,或者我需要为此编写应用程序?

编辑: 文件有 n 行以数字开头,而不是一些文本。 就像电影的标题。

示例行:

34 - 36 : Some text.

【问题讨论】:

  • 您需要为此使用 sed 或 perl,而不是 grep。你试过什么?
  • 您能否提供有关文件格式的更多详细信息?
  • grep 旨在选择而不是编辑数据。这是工作的错误工具。我不敢说它不能在sed 中完成,但您需要某种扩展的正则表达式支持才能进行添加。你也许可以用awk 做到这一点。如果遇到问题,我可能会使用 Perl; Python 可能也能做到。

标签: regex sed grep


【解决方案1】:

您可以将 perl 用作:

perl -i -pe 's/(\d+)/$1+5/eg' filename

See it

【讨论】:

    【解决方案2】:

    可能是 awk。将记录分隔符更改为空格(假设这是您想要做的),然后如果记录匹配正则表达式 ^[0-9]*$ 转换为数字加 5 并打印,否则打印。

    这是一个非常完整的解决方案,但“留作练习”来编写代码。

    【讨论】:

      【解决方案3】:

      我相信你应该使用awk Changing the Contents of a Field

      >cat 1.txt
      34 - 36 : Some text.
      
      
      cat 1.txt | awk '{ $1=$1+5; $3=$3+5; print $0; }'
      39 - 41 : Some text.
      

      【讨论】:

      • 如果字段始终是字段 1 和 3,则可以使用。从问题中不清楚文本文件的格式是否足够严格。
      • 你是对的。无论如何,如果 Steva 改变了他的问题并说任何字段都可以是数字,我会改变我的答案。
      • +1 表示概念。可以用+= 操作符收紧一点,cat 没用。
      【解决方案4】:

      这可能对你有用(GNU sed 和 Bash):

      sed 's/[0-9]\+/$((&+5))/g;s/.*/echo "&"/e'  file
      

      【讨论】:

        猜你喜欢
        • 2013-09-09
        • 1970-01-01
        • 2011-12-27
        • 1970-01-01
        • 1970-01-01
        • 2013-07-07
        • 1970-01-01
        • 2013-12-11
        • 1970-01-01
        相关资源
        最近更新 更多