Создание сценария оболочки для записи в файл XML

Я пишу сценарий оболочки, чтобы писать мои RSS намного проще. Прямо сейчас я застрял в том, как правильно редактировать мои файлы. Смотрите, я хочу, чтобы программа взяла у меня данные, а затем сохранила их для переменных. Затем я хочу, чтобы сценарий оболочки просматривал мой XML-файл, вводил мои переменные и данные строки, а затем сохранил этот новый файл XML с моим последним сообщением в строке под тегами <language></language> . Вот как выглядит мой XML и Shell Script. В настоящее время я использую OSX, и я знаю, что использую смешные имена переменных 🙂

XML:

 <?xml version="1.0" encoding="utf-8"?> <rss version="2.0"> <channel> <title>CJ Cahala's Blog Feed</title> <link>http://www.cjcahala.net/</link> <description>This is my blog in RSS Form</description> <lastBuildDate>Mon, 29 Sep 2014 09:16:00 GMT</lastBuildDate> <language>en-us</language> <item> <title>Hey Guys! Namecheap accepts Bitcoin! Awesome!</title> <link>http://namecheap.com/</link> <guid>http://namecheap.com/</guid> <pubDate>Thu, 2, Oct 2014, 00:15:00 GMT</pubDate> <description>Namecheap has web hosting and a payment option for Bitcoin!</description> </item> <item> <title>This is my first post</title> <link>http://www.cjcahala.net/resume.html</link> <guid>http://www.cjcahala.net/resume.html</guid> <pubDate>Mon, 29 Sep 2014 09:16:00 GMT</pubDate> <description>Hey there, this is my resume- check it out if you want!</description> </item> </channel> </rss> 

Оболочка:

 #!/bin/bash read -p "Channel Title:" ct read -p "Channel Description:" chand read -p "Post Title:" pt read -p "Post Link:" pl read -p "Post GUID (same URL as link):" pg read -p "Post Description:" pd dater=`date` dirt=/Users/cjcahala/Desktop/test.xml echo "hello\n"$dater > $dirt 

2 Solutions collect form web for “Создание сценария оболочки для записи в файл XML”

Не делайте XML как это. Это плохой юю. XML – это не линейная структура данных, поэтому то, что вы делаете, создает хрупкий код.

Парсеры XML – это путь вперед. Большинство языков имеют их. Мне нравится Perl и XML::Twig .

 #!/usr/bin/env perl use strict; use warnings; use XML::Twig; sub insert_new_post { my ( $twig, $lang_elt ) = @_; my $new_item = XML::Twig::Elt->new('item'); #you can probably omit the 'last_child' field, as the RSS readers aren't #going to care about ordering, probably. $new_item->insert_new_elt( 'last_child', 'title', "New title" ); $new_item->insert_new_elt( 'last_child', 'link', "http://unix.stackexchange.com" ); $new_item->insert_new_elt( 'last_child', 'guid', "Somenew GUID" ); $new_item->insert_new_elt( 'last_child', 'pubdate', "Today or something" ); $new_item->insert_new_elt( 'last_child', 'description', "Fishy fishy fishy" ); print "Inserting:\n", $new_item->sprint, "\n"; $new_item->paste_after($lang_elt); } my $twig = XML::Twig->new( 'pretty_print' => 'indented', 'twig_handlers' => { 'language' => \&insert_new_post }, ); $twig->parsefile ( 'your_file.xml' ); $twig->print; #prints to stdout. 

Не уверен, что для этого требуется ответ. Вы можете использовать xmlstarlet для редактирования XML-шаблона. Например,

 xmlstarlet edit --update '/rss/channel/title' --value "$ct" "$dirt" 
  • Вставка текста между двумя шаблонами
  • Как добавить атрибут в тег в файле XML по командной строке?
  • Анализ XML из сценария оболочки
  • Как сгенерировать HTML-отчет nmap с помощью python?
  • Удалить все узлы <FOLDER>! = Значение тега
  • От файла gpx до csv
  • Добавление нового атрибута в существующий xml-файл с помощью sed или awk
  • sed на cygwin может заменить только одного персонажа?
  • Объединить два greps в одну команду
  • Как проверить корректность XML-файла 4 ГБ?
  • Как отформатировать атрибуты xml, а не только элементы
  • Interesting Posts

    Как показать `netgroups` презентабельно (и почему` tr` не работает)?

    Загрузочный загрузчик для загрузки в зашифрованный раздел

    Как предотвратить атаки BADUSB в debian 9?

    `words` в` для имени в словах; делать команды; done`

    Debian не может перезагружаться и запрашивать пароль root (обслуживание)

    Обычные текстовые пароли и аутентификация приложений по сравнению с Windows

    Папки и файлы, потерянные с рабочего стола

    Почему меня все еще спрашивают пароль ssh, когда я использую аутентификацию с помощью частного ключа?

    Как сделать резервную копию данных моей системы Linux, если я хочу получить ее в других операционных системах?

    Evolution addressbok не загружается – как выяснить причину?

    Подсчет файлов в папке без wc

    Имя файла устройства CDC заблокировано после отключения модема

    Совместное использование X-сервера (сеанса) на компьютерах

    Где находится информация о формате файловой системы, хранящемся на внешних жестких дисках

    syslog дублирует весь контент

    Linux и Unix - лучшая ОС в мире.