Feed Rss



Jun 16 2010

Кратък урок по история

категория: Разни

Често има любопитни имена в компютърните неща. Може би знаете 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 света.

Забавно, а?

8 Responses to “Кратък урок по история”

  1. Mickey Mouse says:

    Аз пък винаги съм си мислел, че „grep-na“ идва от обезвучаване на „б“-то в българското „гребна“ – взимам си това, което ми трябва.

  2. Mitko Kostov says:

    Само дето grep прохожда доста преди проявата на vi :)

  3. Стефан Кънев says:

    @Митко Така е, и ако се беше научил да четеш, щеше да видиш, че точно това казвам :)

  4. Искрен Чернев says:

    Трябва да призная – това ме накефи много :) И все пак – grep идва от g/re/p от едитора ed (а не vi), или не съм чел между редовете?

  5. Стефан Кънев says:

    Да, от ed-е. Мислех, че съм го написал ясно. Махнах едно изречение споменаващо vi – би трябвало да премахне объркването.

  6. Михаил says:

    Хоули фъкинг шит, това ми хареса. С риск да прозвуча като профан – какво означават в този контекст g и p?

  7. Михаил says:

    get и print? Най-вероятно. Не обяснява защо print взема шаблон, но явно така са решили древните автори на ed. Във всеки случай, на 1 стъпка е било от това да го кръстят REPL :)

  8. Стефан Кънев says:

    g е global. Пусни един vim и пиши :help :g – същата работа е. p е print.

Leave a Reply