Предположим, вы хотите получить значение узлов playlist_url
для каждого узла channel
, у которого есть узел protected
со значением True
:
$ xmlstarlet sel -t -v '//channel[protected = "True"]/playlist_url' -nl file.xml
http://host.net/aa/vodpr/
http://host.net/aa/vodpr/con_tv_r.php
Используется xmlstarlet
для применения запроса XPATH к документу. -nl
в конце добавляет завершающую новую строку к последнему фрагменту данных.
Чтобы выбрать URL-адрес, соответствующий определенному тексту в узле title
(, например, «содержит text 3
» ), используйте
$ xmlstarlet sel -t -v '//channel[./title[contains(., "text 3")]]/playlist_url' -nl file.xml
http://host.net/aa/vodpr/
Здесь мы обнаруживаем текст text 3
в значении узла title
и выбираем этот конкретный узел channel
. Затем мы выбираем из него playlist_url
.
Команда, которая будет искать имена в текущем каталоге или ниже, которые содержат слова back
(, которые включают backup
), или которые содержат не менее 6 последовательных цифр, и печатает их пути.
find. \( -name '*back*' -o -name '*[0-9][0-9][0-9][0-9][0-9][0-9]*' \) -print
Чтобы что-то сделать с этими файлами или каталогами, сделайте это с помощью -exec
изfind
:
find. \( -name '*back*' -o -name '*[0-9][0-9][0-9][0-9][0-9][0-9]*' \) -exec sh -c '
for pathname do
# code that uses "$pathname"
done' sh {} +
Если вы хотите, чтобы имена содержали шесть цифр в любом месте , а не последовательно, измените шаблон *[0-9][0-9][0-9][0-9][0-9][0-9]*
на *[0-9]*[0-9]*[0-9]*[0-9]*[0-9]*[0-9]*
.
См. также: