在文件中查找以字符开头并添加/附加文本的单词

时间:2018-05-01 11:11:30

标签: linux bash sed

我正在尝试编写一个日志剪贴板,它将添加指向文本的链接

例如,日志包含 -

<a href="https://website/browse/TK-######/">TK-######</a>

我想把所有的传统知识 - &#39;通过添加

将单词添加到链接中
This is some text <a href="https://website/browse/TK-12354/">TK-12354</a> aasdgf asdf 
adsf aasdf <a href="https://website/browse/TK-122/">TK-122</a> sadf sfdg   sfdgsdfg
dghgf sfdg sdfg  sdfg sdgf dsf <a href="https://website/browse/TK-1243/">TK-1243</a>

所以上面的文字看起来像这样 -

IFS=$'\n'
declare -a COMMENTS=($(cat /usr/local/statusTEST.dat | grep -n "TK-"))

for COMMENT in "${COMMENTS[@]}"
    do
        LINE=`echo $COMMENT | cut -d : -f 1`
        TICKET=`echo $COMMENT | grep -o '\bTK-\w*'`

        sed -i "${LINE}s/$TICKET/\<a href\=\"https\:\/\/website.com\/browse\/$TICKET\"\>$TICKET\<\/a\>/g" "/usr/local/statusTEST.dat"

    done

我想出了一种在bash中实现它的方法,但它非常笨重,并且需要永远运行文件 -

sed -i "s/\bTK-/\<a href\=\"https\:\/\/website.com\/browse\/g"

我已经尝试使用sed来读取和更改整个文件,但是我无法通过将ref添加到url或者甚至能够将其添加到结尾来获得语法,即< / p>

{{1}}

有没有人有任何想法?

1 个答案:

答案 0 :(得分:2)

您可以使用单个sed命令:

sed 's~TK-[0-9]*~<a href="https://website/browse/&/">&</a>~g' file

This is some text <a href="https://website/browse/TK-12354/">TK-12354</a> aasdgf asdf
adsf aasdf <a href="https://website/browse/TK-122/">TK-122</a> sadf sfdg   sfdgsdfg
dghgf sfdg sdfg  sdfg sdgf dsf <a href="https://website/browse/TK-1243/">TK-1243</a>
  • &sed
  • 中完全匹配的反向引用
  • 我在~中使用sed作为正则表达式分隔符,以避免在替换文本中过度转义/

根据以下评论:

  

如果我想忽略已经完成的条目

您可以将此sed与2个与TK字符串匹配的捕获组一起使用,只有前面有空格:

sed -E 's~(^|[[:blank:]])(TK-[0-9]+)~\1<a href="https://website/browse/\2/">\2</a>~g' file