Често има любопитни имена в компютърните неща. Може би знаете vi. Там, например, има следната команда:
s/foo/bar/
Това замества първото срещане на foo
с bar
в текущия ред. Съществува и по-обща версия – g:
g/something/s/foo/bar/
Това замества foo
с bar
на редовете, които съдържат something
. Демек, g приема шаблон и команда, която прилага на всички редове, в които шаблона съвпада. Ето как може да изтриете редовете, съдържащи something
:
g/something/d
Тези неща идват от един още по-архаичен текстов редактор – ed. Там има команда p, извеждаща всички редове, в които шаблона съвпада. Но все пак, ето как да изведете всички редове от текущия файл, съдържащи something
:
g/something/p
Впрочем, something
е регулярен израз – „regular expression“, често съкращавано като „re“. Общия запис на командата е:
g/re/p
И ето откъде идва името на една от най-използваните shell команди в POSIX света.
Забавно, а?
Аз пък винаги съм си мислел, че „grep-na“ идва от обезвучаване на „б“-то в българското „гребна“ – взимам си това, което ми трябва.
Само дето grep прохожда доста преди проявата на vi 🙂
@Митко Така е, и ако се беше научил да четеш, щеше да видиш, че точно това казвам 🙂
Трябва да призная – това ме накефи много 🙂 И все пак – grep идва от g/re/p от едитора ed (а не vi), или не съм чел между редовете?
Да, от ed-е. Мислех, че съм го написал ясно. Махнах едно изречение споменаващо vi – би трябвало да премахне объркването.
Хоули фъкинг шит, това ми хареса. С риск да прозвуча като профан – какво означават в този контекст g и p?
get и print? Най-вероятно. Не обяснява защо print взема шаблон, но явно така са решили древните автори на ed. Във всеки случай, на 1 стъпка е било от това да го кръстят REPL 🙂
g е global. Пусни един vim и пиши :help :g – същата работа е. p е print.