Как объединить две команды awk

$ 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}.

0
05.03.2020, 08:18
3 ответа
$  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
0
28.04.2021, 23:21

Я не собираюсь разбирать этот код, чтобы понять, что он делает, но если вы захотите объяснить, я посмотрю, смогу ли я изменить свой ответ.

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

Например, у вас есть a | b | cи x | y, и вы попытались объединить их как a | b | x | y | c. Или что-то.

Итак, чтобы выяснить, что не работает, проверьте вывод a. Затем a | b. А потом a | b | x. И т. д.

-1
28.04.2021, 23:21

Спасибо за предложение и ответы, и я понял, как комбинировать использование '|' символ, и это окончательный код для получения ожидаемого результата.

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
0
28.04.2021, 23:21

Теги

Похожие вопросы