【问题标题】:find and replace from command line unix从命令行unix查找和替换
【发布时间】:2010-02-23 17:21:36
【问题描述】:

我有一个多行文本文件,其中每一行都有格式

..... Game #29832: ......

我想将字符“1”附加到每行的每个数字(每行不同),有人知道从命令行执行此操作的方法吗?

谢谢

【问题讨论】:

    标签: unix replace


    【解决方案1】:
    sed -i -e 's/Game #[0-9]*/&1/' file
    

    -i 用于就地编辑,& 表示与模式匹配的任何内容。如果您不想覆盖文件,请省略 -i 标志。

    【讨论】:

      【解决方案2】:

      使用sed

      cat file | sed -e 's/\(Game #[0-9]*\)/\11/'
      

      【讨论】:

      • UUOC.` sed -e 's/(Game #[0-9]*)/\11/' 文件`
      • 很公平。有些习惯很难改掉。
      【解决方案3】:
      sed 's/ Game #\([0-9]*\):/ Game #1\1:/' yourfile.txt
      

      【讨论】:

      • 不起作用:sed 's/ Game #([0-9]*):/ Game #1\1:/' handHistories1.txt sed: -e expression #1, char 31 : 's' 命令的 RHS 上的无效引用 \1
      • @Aly,可与 gnu sed 一起使用。根据您的 sed 版本,在 ( 和 ) 之前删除反斜杠,或者查看您的 sed 版本是否有参数来启用该语法
      • 您已将命令格式化为引号,因此反斜杠被吃掉了。我使它像代码一样格式化。顺便说一句,OP 想要追加“1”。
      【解决方案4】:

      GNU awk

      awk '{b=gensub(/(Game #[0-9]+)/ ,"\\11","g",$0); print b }' file
      

      【讨论】:

        猜你喜欢
        • 2011-07-27
        • 2013-02-24
        • 2012-12-29
        • 2017-03-21
        • 2013-02-09
        • 2022-01-09
        • 1970-01-01
        • 2014-09-19
        • 1970-01-01
        相关资源
        最近更新 更多