Sed 替换数字内容周围

Sed 替换数字内容周围

我正在修改 html 输出

<td nowrap align="right">4683</td>

我想替换文档中匹配此模式的所有匹配项,其中 4683 可以是长度不同的任何给定数字

所以这些线看起来像

<td nowrap align="right"><a href="4683.html">link</a></td>

我想我正在寻找这样的东西

sed -i 's/align="right">/([0-9]*)/<\/td>/align="right"><a href="4683.html">link<\/a><\/td>/g' index.html

我了解正则表达式可能不会被引用、替换或结构正确

答案1

怎么样 :

sed 's_^\([^>]\+>\)\([[:digit:]]\+\)_\1<a href="\2.html">link</a>_' file.txt
  • 我们使用的_sed替换模式格式,而不是/输入/中存在的格式

  • ^\([^>]\+>\)查找最多(包括)的字符>并将它们放入一组

  • \([[:digit:]]\+\)找到提到的数字并将它们放在一组中以便我们以后可以使用它们

  • 替换模式是\1<a href="\2.html">link</a>其中\1是第一个匹配组,\2是第二个匹配组

    例子 :

    $ sed 's_^\([^>]\+>\)\([[:digit:]]\+\)_\1<a href="\2.html">link</a>_'<<<'<td nowrap align="right">4683</td>'
    
    <td nowrap align="right"><a href="4683.html">link</a></td>
    

如果行中其他地方没有数字,那么您可以简单地使用:

sed 's_[[:digit:]]\+_<a href="&.html">link</a>_' file.txt

例子 :

$ sed 's_[[:digit:]]\+_<a href="&.html">link</a>_'<<<'<td nowrap align="right">4683</td>'

<td nowrap align="right"><a href="4683.html">link</a></td>

答案2

尝试这个,
sed -ri 's/([0-9]+)/<a href=\"&.html\">link<\/a>/g' index.html

相关内容