2017-02-13 10 views
0

Я пытаюсь извлечь часть контента из 2 текстовых файлов и отправить его в виде тела электронной почты с помощью программы mailx. Я пытаюсь сделать это как сценарий bash, так как у меня есть хотя бы ограниченный опыт создания простых сценариев bash и поэтому имеют рудиментарные знания в этой области. Тем не менее, я не возражаю против других вариантов сценариев, таких как perl/python/whatever.блок фрагмента из 2 текстовых файлов и трубок в другую утилиту

Я получил половину от того места, где я хотел бы использовать sed: sed -e '1,/excerpt delimiter 1/d' -e '/excerpt delimiter 2/,$d' file1.txt && sed -e '1,/excerpt delimiter one/d' -e '/excerpt delimiter two/,$d' file2.txt выходы для вывода контента, на который я нацелен, чтобы попасть в тело электронной почты. Но трубопровод сказал, что контент для mailx не работает, по причинам, которые мне не совсем понятны. Иными словами, sed -e '1,/excerpt delimiter 1/d' -e '/excerpt delimiter 2/,$d' file1.txt && sed -e '1,/excerpt delimiter one/d' -e '/excerpt delimiter two/,$d' file2.txt | mail -s excerpts [email protected] не отправляет вывод обеих команд sed в тело сообщения электронной почты: он отправляет только выходные данные команды sed. Я пытаюсь понять, почему это так, и исправить ситуацию, получив вывод обоих команд sed в тело электронной почты.

Дальнейший фон. Два текстовых файла содержат много строк текста и фактически являются дамами веб-страниц, которые я получаю с помощью lynx-браузера. Мне нужен всего лишь блок из нескольких строк из каждого из этих файлов, поэтому я использую sed для разграничения блоков, которые мне нужны, и чтобы я мог вырезать эти несколько строк из каждого файла. Моя задача может быть проще и/или проще, если я попытаюсь сделать акциз только из одного файла, а не из двух. Но поскольку веб-страницы с содержимым, в котором я нуждаюсь, требуют ввода учетных данных для входа, и потому что я пытаюсь автоматизировать этот процесс, я использую параметр cmd_script lynx для первого входа в систему, а затем сохраняю (на самом деле печать) страницы, которые мне нужны. lynx не предлагает, насколько я могу судить, объединить файлы, поэтому я, похоже, застрял в работе с двумя отдельными файлами.

Должно быть, есть альтернативные способы достижения моей цели, и я не ограничен ни по своему усмотрению, ни по необходимости использовать какую-либо конкретную полезность. Единственное реальное ограничение состоит в том, что, поскольку я пытаюсь автоматизировать это, это делается как сценарий, который я могу вызвать как задание cron. Я использую Linux и имею в своем распоряжении все стандартные инструменты для обработки текста. Как может быть ясно, мои навыки/способности к написанию сценариев довольно ограничены, поэтому я пытался добиться того, что я намереваюсь использовать с одним лайнером. mailx правильно настроен и работает в этой системе.

ответ

0

Труба применяется только к первой команде в списке &&. Вам необходимо объединить их в одну составную команду, выход которой подается по каналам до mailx.

{ sed -e '1,/excerpt delimiter 1/d' \ 
     -e '/excerpt delimiter 2/,$d' file1.txt && 
    sed -e '1,/excerpt delimiter one/d' \ 
     -e '/excerpt delimiter two/,$d' file2.txt ; } | 
mail -s excerpts [email protected] 
+0

Это, вероятно, то, чему они учат в сценариях bash 101, но что-то, что те из нас, у кого нет формального обучения, а просто возились с попытками выполнить ограниченные задачи, не будут знать. Кудрявые скобки разрешили проблему для меня - спасибо chepner – MJiller