Как я это сделал? - Содержимое файла удалено!

Прежде всего, спасибо за ваш вклад в этот форум! Я перешел на Ubuntu несколько месяцев назад по рабочим причинам, и эти страницы очень помогают!

Теперь, ближе к делу: я пытался сосчитать определенный шаблон в текстовом файле: grep -c [pattern ] [имя файла] Теперь: шаблон был: знак «больше чем», то есть:> таким образом, команда, которую я дал, была: grep -c> [имя файла] Я получил это сообщение: Использование: grep [ОПЦИЯ] ... PATTERN [ФАЙЛ ] ... Попробуйте `grep --help 'для получения дополнительной информации.

Но теперь текстовый файл был пуст! (к счастью, у меня была резервная копия ...). Зачем? Я ошибся в какой-то предыдущей операции или это была последняя команда, которую я дал? Я просто пытаюсь понять это.

1
задан 14 May 2013 в 23:04

2 ответа

Предыдущий ответ технически точен, но я думаю, что он обходит знания пользователей о том, что они пытались сделать. Давайте сосредоточимся на том, что вы сделали неправильно, а затем перепишем команду, чтобы вы могли вместо этого найти записи «>» в ​​файле.

(Объяснение причин сброса файла). Если вы используете> в конце строки (попробуйте «ls> directory.txt»), вы уничтожите directory.txt [если он существует] и введите результаты команды. Если вы используете >>, он просто добавляет (добавляет в конец) любой существующий файл. "grep" не осознавал, что вы на самом деле искали ">", вместо того, чтобы хотеть передать вывод в файл, который вы хотели найти. В результате он просто ничего не выгружал в файл, в котором были данные.

В вашем случае вы, вероятно, хотели использовать это вместо:

grep -c -- '>' filename.ext

Дайте нам знать, если это решит вашу проблему!

0
ответ дан 14 May 2013 в 23:04

Вы смотрите перенаправление вывода (Bash) . Перенаправляя обычный вывод 'stdout' на filename, вы перезаписываете его. Вывод ошибки: 'stderr' все еще отображается (хотя в вашем терминале по умолчанию). Это был текст справки, который вы видели.

Чтобы фактически использовать символ > в grep в качестве символа для сопоставления, экранируйте его в своей оболочке (Bash), например

grep -c \> myfile

Поместив его в кавычки, '>' также будет работать.

Фрагмент приведенной выше ссылки объясняет перенаправление в более общем виде:

COMMAND_OUTPUT >
  # Redirect stdout to a file.
  # Creates the file if not present, otherwise overwrites it.

  ls -lR > dir-tree.list
  # Creates a file containing a listing of the directory tree.
[..]
1>filename
  # Redirect stdout to file "filename."
1>>filename
  # Redirect and append stdout to file "filename."
2>filename
  # Redirect stderr to file "filename."
2>>filename
  # Redirect and append stderr to file "filename."
&>filename
  # Redirect both stdout and stderr to file "filename."
0
ответ дан 14 May 2013 в 23:04

Другие вопросы по тегам:

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