2015-03-28 2 views
0

Я хочу, чтобы моя команда grep была короче, например, чтобы иметь возможность просто ввести g в командной строке для выполнения grep с опциями -Pei.Как сократить эту команду grep?

Я пробовал с псевдонимом в Bash, но трубопровод не работает.

alias g='grep --color auto -Pei' 

дает мне

history |g qemu 
grep: auto: No such file or directory 
grep: qemu: No such file or directory 

Затем я попытался в .bashrc

function g() { /bin/grep -Pei "[email protected]" ;} 

он по-прежнему выводит

history |g qemu 
grep: qemu: No such file or directory 
+0

Какая версия grep вы используете, GNU или BSD? – Zulu

+1

Псевдонимы работают, заменяя первое слово команды чем-то другим и выполняя результат. Это означает, что если полная команда 'grep -color auto -Pei qemu' не работает, то создание' alias g = 'grep -color auto-Pei'' и запуска 'g qemu' тоже не может работать, потому что они расширяются до одной и той же команды. Сначала попробуйте написать полную рабочую команду, прежде чем наложить ее на псевдонимы. –

+0

Thorsten, ваша проблема решена, что отлично подходит для _you_. Отметка ответа, принятая (будь то моя или нет), помогает _others_ (будущим читателям). – mklement0

ответ

1

Есть две отдельные проблемы с вашим псевдонимом:

  • давно образуют варианты GNU (те, которые начинаются с --, а не -) требуют = между именем параметра и его значение (аргумент):

    • Т.е., она должна быть --color=auto, не --color auto
  • вы используете опцию -e неправильно: его цель состоит в том, чтобы принять мультипликатор поиск моделей, с каждый-e экземпляр требуют аргумент - в вашем случае, [-]e непосредственно следует i, который, следовательно, ошибочно служит в качестве аргумента -e «s, то есть, как шаблон, в результате чего ваш истинный шаблон поиска для неправильного толкования как имя файла операнд.

Таким образом, переопределить псевдоним следующим образом:

alias g='grep --color=auto -Pi' 

Update: Как tripleee's answer подразумевает, используя -e имеет одно преимущество: она позволяет указать шаблоны, которые начинаются с - без неправильное толкование в качестве дополнительных вариантов; таким образом, размещение -eпоследнего в псевдониме даст вам это преимущество.

alias g='grep --color=auto -Pie' 

Конечно, не строит -e в псевдоним всегда оставляет вам возможность указать его по требованию, когда вызова псевдоним, который сделал бы использование нескольких-e вариантов более intuitable.


Наконец, совет, данный @thatotherguy в комментарии стоит Heeding:

Прежде чем определить псевдоним, убедитесь, что его определение работает, как ожидается, как введены команды.

+0

СПАСИБО это работает :) дамп меня ... –

+0

Рад это услышать, Торстен. В интересах как респондентов, так и будущих читателей: если ответ _solves_ ваша проблема, пожалуйста _accept it_, щелкнув большой галочкой рядом с ним; если вы найдете ответ _helpful_, пожалуйста, запустите его, щелкнув значок стрелки вверх. (Вы можете сделать оба.) – mklement0

1

Неверный вариант -e. Как вы его используете, вы указываете, что выражение поиска i (то есть -Pei интерпретируется как -P -e i, а не -P -e -i). Переключитесь на -Pie (или просто -Pi, если вы не ожидаете необходимости искать выражения, начинающиеся с тире).

С первой попытки вам также нужен знак равенства вместо пробела между color и auto.

Обычно вы предпочитаете функции над псевдонимами, хотя в этом ограниченном сценарии тоже работает псевдоним.

Ключевое слово function - это багизм; его удаление повышает мобильность вашего кода.

Не указывать путь к grep; вместо этого убедитесь, что ваш PATH работоспособен.

g() { grep -Pie "[email protected]" ;} 
+0

+ для указания, что '-e' может быть полезен с шаблонами, начинающимися с' -' – mklement0

Смежные вопросы