【问题标题】:awk regex and add 1awk 正则表达式并添加 1
【发布时间】:2011-12-15 21:50:34
【问题描述】:

我有一个 html 文件,其中包含一些需要递增的变量数组。我一直在手工做——但现在占用了我太多的时间。我一直在寻找并尝试找到正确的工具/语法来做我想做的事。

说我有:

file[0]=["blah0 blah0", "file0.jpg"]
file[1]=["blah1 blah1", "file1.jpg"]
file[2]=["blah2 blah2", "file2.jpg"]

我想做的是让脚本在变量编号上加一,让我有空间更早地添加更多变量。我可以指定 5 并得到结果

file[5]=["blah0 blah0", "file0.jpg"]
file[6]=["blah1 blah1", "file1.jpg"]
file[7]=["blah2 blah2", "file2.jpg"]

这是我迄今为止尝试过的 - 但运气不佳......因为它删除了所有方括号

awk -F [\]\[]  '/^file\[[0-9]+\]=/ {$2="["$2+'$userinput'"]";}1' ${workdirect}/index.html > text.txt

有什么建议吗???

【问题讨论】:

  • 嗯。你想做一些补充。我不知道可以执行此类操作的正则表达式。可能您至少需要使用一些脚本语言。
  • 呃,awk 一种脚本语言...

标签: bash shell terminal awk


【解决方案1】:

如果第一行真的开始 file[0]= 并且一切都是连续的,那么这可能会起作用:

awk 'sub(/[0-9]+/,'$userinput'+t) {print; t=t+1}' ${workdirect}/index.html > text.txt

【讨论】:

    【解决方案2】:

    script成为

    #!/bin/bash
    inc=$1
    while read line; do
      p1=${line%%[*}
      p3=${line#*]}
    
      p2=${line#*[}
      p2=${p2%%]*}
      p2=$(( ${p2} + $inc ))
    
      echo $p1[$p2]$p3
    done
    

    致电script

    $ script offset < inputfile
    

    这只是 bash,没有外部开销。

    【讨论】:

      【解决方案3】:
      #!/bin/bash
      FILE=$1
      
      awk '/^file/ {
        m = match($0, "\[[0-9]+\]");
        if (m) {
          printf("%s%d%s\n",
                 substr($0, 0, RSTART),
                 INC + substr($0, RSTART + 1, RLENGTH - 2),
                 substr($0, RSTART + 2, length($0) - RSTART))
        }
      }' INC=$2 $1
      
      $ foo.sh tmphtml 5
      file[5]=["blah0 blah0", "file0.jpg"]
      file[6]=["blah1 blah1", "file1.jpg"]
      file[7]=["blah2 blah2", "file2.jpg"]
      

      【讨论】:

      • 这看起来会做我想做的事 - 但是当我运行它时 - 在 file[14] 之后它开始输出随机数 14, 150, 161, 172, 183...有什么想法吗? ?
      • 对不起,我的错。将最后一个 substr 更改为substr($0, RSTART + RLENGTH - 1, length($0) - RSTART)),它将适用于所有数字。
      • 不错!这并不是你的坏事——你是按照你得到的信息去做的!
      【解决方案4】:

      使用 perl 更容易:

      perl -nle '$n = 5; /(file\[)([[:digit:]]+)(\]=\[.*\])/; print $1, $2 + $n, $3'
      

      【讨论】:

      • 更简单:perl -pe 's/\d+/$&amp; + 5/e'
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-15
      • 2018-07-28
      • 1970-01-01
      相关资源
      最近更新 更多