Вопросы о результатах сопоставления регулярных выражений

$(MAKE)содержит путь к текущей программе make, если вы не перезапишете его.

Если вы просто вызываете makeили имя вашей реализации make, $(MAKE)должно содержать только это имя, так как ваша реализация make была вызвана через поиск PATH. Проверьте это, например. вызов:

cd /usr/bin
./make -f /dev/null | grep MAKE

Если вы вызываете свою реализацию make через абсолютный или относительный путь, $(MAKE)содержит абсолютный путь к вашей реализации make.

Это позволяет вам использовать $(MAKE)в ваших файлах make таким образом, что вы всегда будете вызывать одну и ту же программу make, даже если это временный двоичный файл, скомпилированный с отладочными сообщениями и установленный где угодно.

BTW :Вы можете получить начальное значение, установленное вашей программой make, вызвав:

$make -f /dev/null -p | grep MAKE
0
27.03.2020, 08:18
2 ответа

Попробуйте выполнить команду без части awk, и вы увидите, что там $3нужно.

ip addr | grep -En 'inet (([0-9]*\.){3}[0-9]*)/24'

Команда без awkдаст вам что-то вроде этого.

11:    inet 192.168.1.26/24 brd 192.168.1.255 scope global dynamic noprefixroute wlp1s0
21:    inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0

Вы можете видеть, что первый столбец — это номер строки 11:и 21:. Затем идет inet, а третий столбец — номер ip с маской. Независимо от того, что вы делаете с grep, к номеру IP всегда будет прикреплена сетевая маска. Если вы хотите избавиться от сетевой маски, вы должны использовать sedили что-то, что также изменит ваши найденные строки. Grep будет отображать только то, что находит.

Попробуйте это:

ip addr | grep -En 'inet (([0-9]*\.){3}[0-9]{1,3})/24' | awk '{print "LAN:" $3 }' | sed -En 's/(LAN:.*)\/24/\1/p'

Я уверен, что это можно сделать более элегантно.

0
19.03.2021, 02:32

Это должно помочь:

ip addr | grep 'inet.*\/24' | grep -oE '(([0-9]*\.){3}[0-9]*)' | awk '{ print "LAN:"$1 }'

Первый grep ловит строки с сетями /24. Следующий соответствует адресам IPv4, аргумент -oуказывает grep напечатать только совпавшую часть строки. И awk заменяет «LAN :» в начале строки.

Теперь о том, почему ваш сниппет работает так, как вы просили. Без ключа -ogrep печатает всю строку с совпадением, затем awk печатает третий «аргумент», то есть третье «слово», разделенное пробелами.

0
19.03.2021, 02:32

Теги

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