Как я могу сохранить строки от терминала до текстового файла?

Я сделал простой сценарий удара, которые упаковывают файл и затем загружают его, если все прекрасно, я получаю некоторые ссылки http:// на свой материал, как произведено, я хочу знать, как я могу скопировать те ссылки автоматически на файл или Переменную? Также я получаю некоторые строки, которые не запускаются с http://, но с #, например, как я могу удалить их и добавить пустые строки в этом месте?

0
задан 3 November 2014 в 07:59

1 ответ

Для получения вывода сценария в файл используйте:

script.sh >file.txt

Удалить комментарии (строки, запускающиеся с #) но оставьте пробел в их месте, используйте:

script.sh | sed 's/^#.*//' >file.txt

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

script.sh | sed 's/^#.*//' | tee file.txt

Объяснение

  • > символ оболочки для перенаправления. Это говорит оболочке брать то независимо от того, что шло в stdout и перенаправление в именованный файл вместо этого.

  • sed линию за линией утилита редактирования. Здесь мы используем sed замените командой, которая похожа s/old/new/ где old любое регулярное выражение. В нашем случае, old ^#.* где ^ соответствия в начале строки, # соответствует символу хеша, и .* подстановочный знак должен соответствовать чему-нибудь, что следует. В нашем случае, new пусто. Таким образом, sed 's/^#.*//' строки замен, которые начинаются # с пустой строкой.

  • tee утилита, используемая для создания копии stdout. tee file.txt возьмет то, что это находит на stdin, и (a) сохраняют его в файл file.txt в то время как одновременно (b) отправляют его в stdout. Если хотят добавить к file.txt вместо перезаписи это мы можем использовать tee -a file.txt где -a опция говорит tee добавлять.

Улучшения

Добавление текста из другого .txt файла в начале этого file.txt

Поместить содержание first.txt в начале file.txt:

{ cat first.txt; script.sh; } >file.txt

Скопируйте только строки, запускающиеся с http://

Для выбора строк согласно некоторому шаблону, не изменяя их, grep правильный инструмент:

script.sh | grep '^http' >file.txt

Копирование с первой строки с http://*

sed позволяет выбирать диапазон строк. Здесь, мы используем диапазон /^http/,$ где /^http/ первая строка, с которой встречаются, который запускается с http и $ символ sed для последней строки во входе. p говорит sed для печати строк, которые соответствуют тому диапазону:

script.sh | sed -n '/^http/,$ p'

Текст Добавления объединения из другого файла и копирование с первой строки с http://*

{ cat first.txt; script.sh; } | sed -n '/^http/,$ p' >file.txt

Добавьте пустую строку после каждой строки, запускающейся с http

Здесь мы используем sed снова. Когда мы находим строку, которая запускается с http, мы добавляем новую строку \n в конец той строки:

script.sh | sed  's/^http.*/&\n/'
5
ответ дан 4 August 2019 в 20:32

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

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