$ sed '/\\includegraphics/s/img[0-9]*/&.png/g' input
\includegraphics[width=0.49\textwidth]{img1.png}
\includegraphics{img2.png}
\subfloat{\includegraphics[width=0.3\textwidth]{img3.png}}
\subfloat{\includegraphics{img4.png}}
Регулярное выражение для операции замены ищет img
, за которым следует любое количество цифр (, включая нулевые цифры ), и добавляет .png
в конец совпадения.
Чуть более надежная версия, которая будет выполнять только замену внутри фигурных скобок:
$ sed '/\\includegraphics/s/{\(img[0-9]*\)}/{\1.png}/g' input
\includegraphics[width=0.49\textwidth]{img1.png}
\includegraphics{img2.png}
\subfloat{\includegraphics[width=0.3\textwidth]{img3.png}}
\subfloat{\includegraphics{img4.png}}
Это ищет (, например){img3}
в любой строке, содержащей \includegraphics
, извлекает из нее img3
, добавляет .png
и повторно -заключает это в новые фигурные скобки для желаемого {img3.png}
.
$ grep -oE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b|https.*" /tmp/test.txt
https://example.com
10.5.39.23
10.15.1.5
10.15.13.28
10.35.73.16
10.35.93.4
$ cat /tmp/test.txt
domainurl=https://example.com
abc.host=10.5.39.23#10.15.1.5
locator.port=1013#1013
db.cassandra.contactPoints=10.15.13.28,10.35.73.16,10.35.93.4
Я не собираюсь разбирать этот код, чтобы понять, что он делает, но если вы захотите объяснить, я посмотрю, смогу ли я изменить свой ответ.
Однако способ отладки заключается в проверке вывода вашего конвейера на каждом этапе, чтобы убедиться, что он соответствует вашим ожиданиям.
Например, у вас есть a | b | c
и x | y
, и вы попытались объединить их как a | b | x | y | c
. Или что-то.
Итак, чтобы выяснить, что не работает, проверьте вывод a
. Затем a | b
. А потом a | b | x
. И т. д.
Спасибо за предложение и ответы, и я понял, как комбинировать использование '|' символ, и это окончательный код для получения ожидаемого результата.
grep -P '((?<=[^0-9.]|^)[1-9][0-9]{0,2}(\.([0-9]{0,3})){3}(?=[^0-9.]|$)|(http|ftp|https|ftps|sftp)://([\w_-]+(?:(?:\.[\w_-]+)+))([\w.,@?^=%&:/+#-]*[\w@?^=%&/+#-])?|\.port|\.host|contact-points|\.uri|\.endpoint)' $file | grep '^[^#]'| awk '{split($0,a,"="); print a[1],a[2]}'|sed 's/^\|#/,/g'| awk '/http:\/\// {print $2,80}
/https:\/\// {print $2,443}
/Points/ {print $2,"9042"}
/host/ {h=$2}
/port/ {print h,$2; h=""}'|awk -F'[, ]' '{for(i=1;i<NF;i++){print $i,$NF}}'|column -t