Псевдоним grep в параметре поиска -exec

Любой из них будет выбирать строки с 1в первом столбце

awk '$1 == 1'
grep -w '^1'

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

awk '$1==1 { x++ } END { print x }'
grep -cw '^1'
1
04.09.2020, 18:56
2 ответа

Вы не можете использовать такие псевдонимы. Псевдонимы работают, только если они используются первыми в длинной последовательности команд, оболочка в основном заменяет текст псевдонима фактической командой. Когда вы вводите команду, оболочка сначала ищет псевдоним, затем функцию и так далее. Подстановка команд/подстановка псевдонимов не работает, если вы используете псевдоним в середине последовательности команд.

Кроме того, флаг -execдля findвсегда будет порождать отдельный процесс, выполняющий двоичный файл, а не псевдоним или функцию, это жестко запрограммировано.

1
28.04.2021, 23:07

Некоторые оболочки позволяют расширять псевдонимы в любом месте командной строки -, например, zshимеет концепцию глобального псевдонима ,alias -g 'grep=grep --color=auto -H'

Однако, если ваша интерактивная оболочка — bash, псевдонимы расширяются только тогда, когда они появляются в качестве первого слова команды, поэтому вам нужно будет обернуть вызов grepв оболочку и вызвать оболочку таким образом, чтобы ваш файл ~/.bashrcдля чтения, как если бы в сеансе интерактивной оболочки.

Например

find. -name '*.txt' -exec bash -ic 'for f do grep foo "$f"; done' find-bash {} +

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

1
28.04.2021, 23:07

Теги

Похожие вопросы