2016-12-10 7 views
1

В моих собственных усилиях решить 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).Как определить номер строки последнего вхождения строки в файл с помощью сценария оболочки?

ответ

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 
+0

Я проверил ваше решение оболочки в Zsh, и она работала хорошо, упомянуть для будущей ссылки, если кто-то заинтересован. Я лично использую ваше решение awk, поскольку оно более компактно. – BH2017