grep -A 1 Godini test.txt | head -n 1
Това е грешна комбинация за твоите цели. Да дообясня. Командата head взема N на брой редове от горната част на изхода. Командата tail взема N на брой редове от долната част на изхода. За твоите цели трябва да ползваш head и tail със съответстващите им по посока параметри на grep. Т.е., ако искаш да вземеш горен ред, ползваш параметъра -B на grep в комбинация с командата head. Ако искаш да вземеш долен ред, ползваш параметъра -A на grep в комбинация с командата tail. Ето как се четат командите:
GeSHi (Bash):
grep -B 2 'търсен текст' file | head -n 1
Чете се - вземи допълнително 2 реда над търсения текст и покажи най-горния от тях, с което на екрана виждаме реда, който е 2 реда по-нагоре от търсения.
GeSHi (Bash):
grep -A 2 'търсен текст' file | tail -n 1
Чете се - вземи допълнително 2 реда под търсения текст и покажи най-долния от тях, с което на екрана виждаме реда, който е 2 реда по-надолу от търсения.
Ако все още не разбираш, спри се малко и помисли логически
P.S.: За досхващане, ето какво се случва при изпълнението на грешната комбинация
GeSHi (Bash):
grep -A 1 Godini test.txt | head -n 1
Началото на командата (частта преди правата черта) извежда това:
Godini 10
Adres 5 Street
След това head казва да се изведе най-горният ред от този изход, при което получаваш това
Godini 10
А си очаквал да получиш това
Adres 5 Street
Ще получиш нужния ред, ако вместо най-горния ред, кажеш на командата да изведе най-долния ред (т.е., вместо head, трябва да ползваш tail).
И едно допълнение за случая, когато файлът не съдържа толкова редове, колкото сме опитали да извикаме. Т.е., ако файлът съдържа (номерирам редовете за улеснение)
1. Ime Username
2. Godini 10
3. Adres 5 Street
И ние извикваме командата
GeSHi (Bash):
grep -A 2 'търсен текст' file | tail -n 1
Тогава началото на командата (частта преди правата черта) ще се опита да изведе това
2. Godini 10
3. Adres 5 Street
4. втори допълнителен ред
Ред номер 4 ще бъде извикан за показване, тъй като "-A 2" означава да се вземе търсеният ред плюс още два реда след него. Тогава втората част на командата (tail) би трябвало да вземе ред номер 4, тъй като той е най-отдолу (tail чете отдолу нагоре). Но, тъй като в случая ред 4 не съществува, файлът ни приключва с третия ред, то на екрана ще се изведе ред 3 (Adres 5 Street), тъй като tail ще вземе най-долния ред, а grep ще му е предоставил 2 реда - търсеният и реда под него (няма да добави и четвъртия ред, тъй като той не съществува). При това положение, ползвайки командата с параметри, с които се очаква да изведеш на екрана реда, който е два реда по-надолу от търсения, ще изведеш на екрана реда, който е под търсения, тъй като той е последен във файла.