我正在尝试编写一个日志scraper,它将添加文本链接,
例如日志包含 -
This is some text TK-12354 aasdgf asdf
adsf aasdf TK-122 sadf sfdg sfdgsdfg
dghgf sfdg sdfg sdfg sdgf dsf TK-1243
我想通过添加将所有“TK-”单词变成链接
<a href="https://website/browse/TK-######/">TK-######</a>
所以上面的文字看起来像这样 -
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>
我想出了一种在 bash 中执行此操作的方法,但它确实很笨重,并且需要很长时间才能运行该文件 -
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
我尝试使用 sed 来读取和更改整个文件,但我无法完全掌握将引用添加到 url 中的语法,甚至无法将其附加到末尾,即
sed -i "s/\bTK-/\<a href\=\"https\:\/\/website.com\/browse\/g"
有人有什么想法吗?
最佳答案
您可以使用单个 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
中使用~
作为正则表达式分隔符,以避免在替换文本中过度转义/
。
根据下面的评论:
if I wanted to ignore entries that had already been done
您可以将此 sed
与 2 个匹配 TK
字符串的捕获组一起使用,前提是它前面有空格:
sed -E 's~(^|[[:blank:]])(TK-[0-9]+)~\1<a href="https://website/browse/\2/">\2</a>~g' file
关于linux - 在文件中查找以字符开头的单词并添加/添加文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50115463/