В дополнение к ответу Ромео обратите внимание, что
grep pattern --whatever
требуется POSIX для поиска шаблона в файле -- независимо
. Это связано с тем, что никакие параметры не должны распознаваться после аргументов, не являющихся параметрами (здесь шаблон
).
GNU grep
в этом случае не соответствует POSIX. Его можно сделать совместимым, передав переменную окружения POSIXLY_CORRECT (с любым значением) в его окружение.
Это относится к большинству утилит и утилит GNU, использующих GNU или совместимую реализацию getopt()
/getopt_long()
для разбора аргументов командной строки.
Существуют очевидные исключения, такие как env
, где env VAR=x grep --version
дает вам версию grep
, а не env
. Другим заметным исключением является оболочка GNU (bash
), где ни интерпретатор, ни какая-либо из его встроенных функций не принимают параметры после аргументов, не являющихся параметрами. Даже его getopts
не могут анализировать опции способом GNU.
В любом случае, POSIXLY_CORRECT не спасет вас, если вы сделаете
grep -e pattern *.js
(здесь шаблон
не является необязательным аргументом, он передается как аргумент в -e
, поэтому после этого разрешены дополнительные параметры).
Поэтому всегда полезно помечать конец опций символом --, если вы не можете гарантировать, что последующее не будет начинаться с -
(или +
с некоторыми инструментами):
grep -e pattern -- *.js
grep -- pattern *.js
или используйте:
grep -e pattern ./*.js
(обратите внимание, что grep -- шаблон *
не поможет вам, если есть файл с именем -
, а grep pattern ./*
будет работать.grep -e "$pattern"
следует использовать вместо grep "$pattern"
в случае $pattern
может начинаться с -
).
В середине 90-х годов была предпринята попытка bash
указать getopt()
, какие аргументы (как правило, получаемые в результате расширения глобуса) не должны рассматривались как параметры (через переменную окружения _
), но они были удалены, поскольку вызывали больше проблем, чем решали.
Если вы хотите скопировать содержимое другого файла в файл, который вы сейчас редактируете в Vi (который может быть новым пустым файлом), вы можете использовать команду ex read в Vi следующим образом:
:r otherfile.conf
и он будет включен после строки, на которой в данный момент находится ваш курсор. Чтобы включить его в конец файла, вы можете вставить $ после двоеточия:
:$r otherfile.conf
Чтобы включить его в начало файла:
:0r otherfile.conf
Чтобы включить его после строки 123:
:123r otherfile.conf