Для чего используется «кошка»?

14

Я видел команду cat, появляющуюся в некоторых онлайн-материалах, и мне было любопытно, что catи зачем она делает в контексте кого-то, кто просто делает некоторые простые вещи из командной строки.

cosmoflop12
источник

Ответы:

12

cat«S основная цель состоит в том, чтобы против кошачьих файлов Enate. cat file1 file2 ...будет отображать содержимое file, file2а остальные один за другим, как если бы содержимое было в одном файле. Смотрите справочную страницу :

NAME
       cat - concatenate and print files

Он предназначен для использования, где либо:

  • целевая команда не может читать из файлов, и вам нужно передать ей несколько файлов. Примером является trутилита. Обычно, с одним файлом, вы должны сделать:

    tr < file
    

    Но с несколькими файлами перенаправление не может быть использовано, поэтому вы должны сделать:

    cat file1 file2 ... | tr
    
  • целевая команда может читать из нескольких файлов, но ее поведение может измениться, если ей дано несколько файлов. Примером является то wc, что печатает счетчики для каждого файла вместе с именами файлов, где вы, возможно, хотели получить только общее количество, без имени файла.

Помните , что большинство команд вы сталкиваетесь ( grep, sed, awk, sort, ...) может читать файлы прекрасно.

Если вы хотите просмотреть содержимое файла, используйте пейджер - lessи moreоба в высшей степени способны представлять файлы для просмотра, и их гораздо удобнее использовать.

Мур
источник
Перенаправление может очень хорошо использоваться с несколькими файлами, так как вы можете комбинировать его с заменой процессов и команд, < <(cat file[12]) trа также <<<$(cat file[12]) trоба являются совершенно допустимыми способами перенаправления нескольких файлов. Конечно, это нужно и catдля этого, просто этот трубопровод - не единственный способ.
десерт
@dessert, если вам нужно быть педантичным, это перенаправление все еще использует только один файл - файл, представляющий стандартный вывод команды (или стандартный ввод, если наоборот). Bash не поддерживает перенаправление нескольких файлов, как в zsh.
Муру
9

catявляется одной из наиболее часто используемых команд в Unix-подобных операционных системах. Он имеет три связанные функции в отношении текстовых файлов:

  1. показывая их
  2. объединяя их копии
  3. создавая новые.
  4. Копировать файлы

Общий синтаксис кошки:

cat [options] [filenames] [-] [filenames]

Чтение файлов

Наиболее распространенное использование cat - чтение содержимого файлов, и cat часто является наиболее удобной программой для этой цели. Все, что необходимо для открытия текстового файла для просмотра на мониторе дисплея, - это ввести слово cat, затем пробел и имя файла, а затем нажать клавишу ВВОД. Например, следующее будет отображать содержимое файла с именем file1:

cat file1

конкатенация

Вторая роль кота - конкатенация. (Это источник любопытного имени кошки.) Не влияет на исходные файлы.

Например, следующая команда объединит копии содержимого трех файлов file1, file2 и file3:

cat file1 file2 file3

Содержимое каждого файла будет отображаться на экране монитора. Этот вывод можно так же легко перенаправить с помощью оператора перенаправления вывода в другой файл, например file4, используя следующее:

cat file1 file2 file3 > file4

Создание файла

Благодаря комментарию @muru : кошка может создавать новые файлы в зависимости от функции перенаправления оболочки, а не сама

Для небольших файлов это часто проще, чем использовать vi, gedit или другие текстовые редакторы. Для этого введите cat, затем оператор перенаправления вывода и имя создаваемого файла, затем нажмите ENTERи, наконец, одновременно нажмите клавиши Ctrl& d.

Например, новый файл с именем file1 можно создать, набрав

cat > file1

затем нажмите ENTERи одновременно нажмите кнопки Ctrl& d.

PS1: если файл с именем file1 уже существует, он будет перезаписан

PS2: вы можете добавить к выходу из файла, используя >>пример оператора cat >> file1

Копировать файлы

Команду cat также можно использовать (в зависимости от функции перенаправления оболочки) для создания нового файла и передачи ему данных из существующего файла. Пример: сделать копию файла oldfile.txt:

cat oldfile.txt > newfile.txt

Ссылки:

Maythux
источник
1
Re 3: catне создает эти файлы - оболочка, когда вы использовали перенаправление. Вы могли бы также сделать echo foo > file1.
Муру
@muru Вы совершенно правы, но это все еще использование команды cat
Maythux
1
Нет, это не так. Вы приписываете тому, catчто на самом деле делает что-то другое. Например, выполнение less file1 > file2(или grep '.*' file1 > fileили awk 1 file1 > file2или ...) имеет тот же эффект. То же самое для 4. Это просто злоупотребления.
Муру
Я знаю, что могу использовать это просто > fileи дать тот же результат, но разве я не могу считать это действительным, если сделать это с кошкой ?!
Maythux
1
Вы можете, если вы укажете, что catэто не создает файл. Утверждение catсоздает или копирует файл - просто ложь.
Муру
1

Может использоваться для отображения содержимого файла. Например: cat "my file.txt". Вы также можете сделать, man catчтобы показать вам детали о том, что catможет быть использовано для.

Пунит Гилл
источник
0

Вот еще один способ создания файла с использованием перенаправления оболочки (или конвейера) и cat:

cat << EOF > foo.sh
#!/bin/sh
echo 'Hello World!'
EOF

cat << EOFбудет выводить следующие строки, пока строка EOFне встретится снова. Затем >( >>) перенаправит вывод в файл foo.sh. В качестве альтернативы, если вам нужно создать файл с правами root, вы можете направить вывод в команду tee( tee -a), выполняемую командой sudo:

cat << EOF | sudo tee foo.sh && sudo chmod +x foo.sh
#!/bin/sh
HELLO='Hello World!'
echo "\$HELLO"
EOF
  • Выше будет делать файл исполняемым ( chmod +x), если он успешно создан ( &&).
  • Специальное значение некоторых символов (as $) должно быть экранировано (with \) в выводе cat.
pa4080
источник