bash: читает текстовый файл и удаляет определенные символы, если они существуют - PullRequest
0 голосов
/ 16 декабря 2018

Я пытаюсь избавиться от последней косой черты в URL, но только если она существует.есть идеи?

tail -1 /var/script/string.txt | grep -oP '(?<=expanded_url":")[^"]+'

ответ:

https://research.checkpoint.com/ramnits-network-proxy-servers/

Желаемый вывод:

https://research.checkpoint.com/ramnits-network-proxy-servers

Ответы [ 2 ]

0 голосов
/ 16 декабря 2018

Вы можете использовать отрицательный прогноз (?:(?!/?").)+, чтобы проверить, что справа не является дополнительной косой чертой, за которой следует двойная кавычка.Если это не так, то возьмите любой символ и повторите это 1+ раза.

См. regex demo

Например:

echo 'expanded_url":"https://research.checkpoint.com/ramnits-network-proxy-servers/"' | grep -oP '(?<=expanded_url":")(?:(?!/?").)+'

Результат

https://research.checkpoint.com/ramnits-network-proxy-servers
0 голосов
/ 16 декабря 2018

Если вы согласны с awk, вы также можете попробовать выполнить следующие действия.

var="https://research.checkpoint.com/ramnits-network-proxy-servers/"
echo $var | awk '{sub(/\/$/,"")} 1'

Объяснение: Добавление пояснения к приведенному выше коду сейчас, только для поясненияцели.

var="https://research.checkpoint.com/ramnits-network-proxy-servers/"    ##Creating a variable in shell which has value as OP mentioned.
echo $var | awk '{sub(/\/$/,"")} 1'         ##Sending echo output to awk command here. In awk command using sub to substitute / which comes in end of line with NULL.
                                            ##awk works on method of condition and action, so mentioning 1 is making condition TRUE and not mentioning any action so by default
                                            ##Printing of line/variable value will happen.

РЕДАКТИРОВАТЬ: Видя вашу попытку попытаться добавить еще 1 решение, чтобы избежать многих комбинаций команд здесь (это будет читать только последнюю строку Input_fileи выйдет из-под контроля, так как я ввел в нее exit).

tac Input_file | awk 'FNR==1 && /xpanded_url\":\"/{sub(/\/$/,"");print;exit}'

EDIT2: Добавление одной awk команды здесь, в некоторыхawk в его блоке END мы не можем получить последнюю строку в некоторых, которые мы можем, поэтому добавляем оба вида решений, которые работают для людей.

awk 'END{if($0 ~ /xpanded_url\":\"/){sub(/\/$/,"");print}}'  Input_file
OR
awk '{val=$0}END{if(val ~ /xpanded_url\":\"/){sub(/\/$/,"",val);print val}}'  Input_file
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...