-1

Как я могу упростить эту команду в Linux, состоящую из cat каналу grep .

cat foo*.txt | grep cow

Мне сказали, что это неправильный способ сделать это. Это почему?

2 ответа2

6

Вы можете передать имена файлов в grep:

grep cow foo * .txt

Это «неправильно», потому что вы используете cat когда она вам не нужна, правда.

3

С уважением к работе предыдущих авторов, я хотел бы отметить, что эти две команды делают (немного) разные вещи. Команда OP объединяет все файлы foo * .txt и ищет объединенный результат один раз, чтобы увидеть, появляется ли строка «корова». Команда @Patrice Levesque выполняет N поисков, по одному для каждого из N совпадающих файлов.

Хотя по общему признанию неясен и надуман, возможно создать случаи, когда команда OP работает, и команда non-безвозмездно терпит неудачу:

$ for C in w c o; do printf '%s' "$C" > foo-$C.txt; done
$ grep cow foo*.txt
$ cat foo*.txt | grep cow
cow
$ rm foo*
$ printf "wilco" > foo-1.txt
$ cp foo-1.txt foo-2.txt
$ grep cow foo*.txt
$ cat foo*.txt | grep cow
wilcowilco

Суть в том , что она не может быть неправильный способ сделать это, в зависимости от того, что это такое , что вы пытаетесь сделать.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .