В моих собственных усилиях решить this opened question моего вопроса в Ask Fedora. Я пытаюсь определить номер строки последнего вхождения строки Fedora
в моем /boot/grub2/grub.cfg
файле. Есть ли способ сделать это, используя sed
, grep
, awk
или любую другую общую оболочку (в частности, оболочку Z, если я использую специальные команды Unix)? Например, команда, которую я хочу, вернет 127
(т. Е. Строка 127, где происходит последнее вхождение строки Fedora
) для файла this grub.cfg. Я бы использовал эту команду оболочки, чтобы определить этот номер строки, чтобы я мог передать ее команде sed (с командой sed
, аналогичной команде this question, так как я хочу заменить регулярное выражение в строках после тех, которые упоминают Fedora).Как определить номер строки последнего вхождения строки в файл с помощью сценария оболочки?
1
A
ответ
3
Использование AWK:
awk '/Fedora/ { ln = FNR } END { print ln }'
Использование Grep:
grep -n 'Fedora' | tail -n1 | cut -d: -f1
Использование оболочки (проверено в Баш только):
unset ln lnr
while read -r; do
((lnr++))
case "$REPLY" in
*Fedora*) ln="$lnr";;
esac
done < grub.cfg
echo $ln
Я проверил ваше решение оболочки в Zsh, и она работала хорошо, упомянуть для будущей ссылки, если кто-то заинтересован. Я лично использую ваше решение awk, поскольку оно более компактно. – BH2017