有没有办法在特定文本中添加数字?在我的文本文件上:
<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
}
'