Найти слова в файле, начинающиеся с символа и добавить / добавить текст - PullRequest
0 голосов
/ 01 мая 2018

Я пытаюсь написать журнал, который будет добавлять ссылки к тексту,

Так, например, журнал содержит -

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"

У кого-нибудь есть идеи?

1 Ответ

0 голосов
/ 01 мая 2018

Вы можете использовать одну команду 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...