Как я могу упростить эту команду в Linux, состоящую из cat
каналу grep
.
cat foo*.txt | grep cow
Мне сказали, что это неправильный способ сделать это. Это почему?
Вы можете передать имена файлов в grep
:
grep cow foo * .txt
Это «неправильно», потому что вы используете cat
когда она вам не нужна, правда.
С уважением к работе предыдущих авторов, я хотел бы отметить, что эти две команды делают (немного) разные вещи. Команда 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
Суть в том , что она не может быть неправильный способ сделать это, в зависимости от того, что это такое , что вы пытаетесь сделать.