将订购号添加到特定文本

将订购号添加到特定文本

有没有办法在特定文本中添加数字?在我的文本文件上:

<a href="http://localhost/file1.txt">file </a>
<a href="http://localhost/file2.txt">file </a>

<a href="http://localhost/file1.txt">file </a>
<a href="http://localhost/file2.txt">file </a>
<a href="http://localhost/file2.txt">file </a>

<a href="http://localhost/file.1.txt">file </a>
<a href="http://localhost/file.2.txt">file </a>
<a href="http://localhost/file.3.txt">file </a>
<a href="http://localhost/file.4.txt">file </a>

并将订购号添加到文件和输出中:

<a href="http://localhost/file1.txt">file 1</a>
<a href="http://localhost/file2.txt">file 2</a>

<a href="http://localhost/file1.txt">file 1</a>
<a href="http://localhost/file2.txt">file 2</a>
<a href="http://localhost/file2.txt">file 3</a>

<a href="http://localhost/file1.txt">file 1</a>
<a href="http://localhost/file2.txt">file 2</a>
<a href="http://localhost/file3.txt">file 3</a>
<a href="http://localhost/file4.txt">file 4</a>

答案1

sed 's|\([^.e]*\).txt">.... |&\1|' <in >out

而且……你又简化了。

而且……又让事情变得复杂了。因此,上面的代码只会复制字符串中已有的数字 - 它不会修复任何损坏的数字。这会:

{  sed '/./!G;s/\n/::::::&::::/
        s/\(.*[^0-9]\)[0-9][^.]*/\1  /' |
   nl   -d::|
   sed 's/ *\([0-9]*\)\(.*\)  \(.*\) /\2\1\3 \1/'
}  <infile >outfile

使用 的nl逻辑页面分隔符仅计算部分由空行分隔。这是很多不过,比第一个涉及更多。

我稍微扩展了它以处理相当任意的情况(!单线!)文件名。

答案2

一种方法是awk

awk '
  !NF { c=0 ; print ; next }
  { sub(/file.*txt/,"file"++c".txt")
    sub(/>file </,">file "c"<")
    print
  }
'

相关内容