Как удалить XML-подобные теги из ввода?

Из Ubuntu 13.01 Compiz использует dconf в качестве backend вместо gconf.

Список активных плагинов compiz

Запустите dconf dump /org/compiz/profiles/unity/ | grep active-plugins в терминале. Это даст вам нечто вроде

active-plugins=['core', 'composite', 'opengl', 'wall', 'resize', 'vpswitch', 'compiztoolbox', 'move', 'snap', 'grid', 'imgpng', 'commands', 'unitymtgrabhandles', 'mousepoll', 'place', 'copytex', 'regex', 'session', 'animation', 'fade', 'expo', 'workarounds', 'ezoom', 'scale', 'unityshell']

Изменить на пользователя

См. Ответ https://askubuntu.com/a/320677/10475

широкое изменение

См. ответ https://askubuntu.com/a/320677/10475

1
задан 9 May 2016 в 02:51

2 ответа

Я только что написал и протестировал это, и он работает для меня, если ваш текст находится в файле: text_for_sed.txt

command:

sed -n "/<tmp>\([[:digit:]]\{2\}\)<\/tmp>/{
    s/<tmp>\([[:digit:]]\{2\}\)<\/tmp>/\1/p
    n
    s/<flik>\([[:digit:]]\{2\}\)<\/flik>/\1/p
    n
    s/<t>\([[:alpha:]]\+\)<\/t>/\1/p
}" text_for_sed.txt

output

48
46
Fair

, если grep производит выход, тогда вы будете его транслировать в sed

<your grep command> | sed -n "/<tmp>\([[:digit:]]\{2\}\)<\/tmp>/{
    s/<tmp>\([[:digit:]]\{2\}\)<\/tmp>/\1/p
    n
    s/<flik>\([[:digit:]]\{2\}\)<\/flik>/\1/p
    n
    s/<t>\([[:alpha:]]\+\)<\/t>/\1/p
}"

Я знаю, что это сложно выглядит, я пытался подумать о более лучшем (более простом) путь - если бы вы могли сделать это за несколько проходов, grep --only было бы проще, но за один проход sed это единственный способ, которым я знаю, как это сделать.

2
ответ дан 23 May 2018 в 11:23
  • 1
    Я попробовал это, и это дало мне только tmp и flik temps .. "fair " не показывал – John Orion 6 May 2016 в 12:27
  • 2
    вы уверены, что выход grep согласован? Он работал для меня с текстом, который вы предоставили. Я бы рекомендовал упростить регулярное выражение на последней строке и посмотреть, что это печатает что-либо – the_velour_fog 6 May 2016 в 12:31
  • 3
    а также "справедливый" теперь «частично облачно». но настройка <t> </t> все еще отображается, если я запускаю команду без sed. Я удалил последнюю строку секции sed и все еще только напечатал значение в tmp и flik. но его почти 6am здесь, и я должен уйти в 11 .. я думаю, мне нужно немного поспать: D – John Orion 6 May 2016 в 12:42
  • 4
    @JohnOrion ах, что, вероятно, проблема, регулярное выражение s/<t>\([[:alpha:]]\+\)<\/t>/\1/p не будет совпадать, если его не одно слово типа «справедливо», вы можете попробовать s/<t>\(.\+\)<\/t>/\1/p – the_velour_fog 6 May 2016 в 12:48
  • 5
    до сих пор это было самым близким к тому, чтобы получить меня, что я хочу показать на экране ... это теперь работает, но показывает только первое слово, если есть два ... как сейчас, его высказывание «Частично облачно», но я получаю только Частично. Я играл и все еще: (полностью потерял :( .. Я не могу понять, как получить второе слово, чтобы показать, и если бы я мог тогда, я должен был убедиться, что это не потерпит неудачу, если он вернется к одно слово – John Orion 6 May 2016 в 22:30
#!/bin/bash 

data=$(lynx -dump "http://wxdata.weather.com/wxdata/weather/local/14225?cc=*&unit=f&dayf=1" | grep -A 2 -m 1 "<tmp>")

for pattern_to_find in tmp flik t
do
    echo $data | tr " " "\n" | sed -ne "/<$pattern_to_find>/s#\s*<[^>]*>\s*##gp"
done

Выход

51
51
Mostly

Объяснение:

echo $data | tr " " "\n" | sed -ne '/<pattern_to_find>/s#\s*<[^>]*>\s*##gp'

tr " " "\n" - заменяет пробелы на \n

Выход

Элемент списка

n - подавляет печать всех строк

e - script [!d9 ]

/<pattern_to_find>/ - находит строки, содержащие указанный шаблон, что может быть, например, <tmp>

next - это подстановочная часть s///p, которая удаляет все, кроме желаемого значения, где / заменяется на # для лучшей читаемости:

s#\s*<[^>]*>\s*##gp

\s* - включает в себя белые пробелы, если они существуют (то же самое в конце) <[^>]*> представляет <xml_tag> как альтернативную причину отсутствия жадного регулярного выражения <.*?> работа для sed g - заменяет все, например, закрытие xml </xml_tag> тега

Источник @vldbnc

2
ответ дан 23 May 2018 в 11:23
  • 1
    Пробовал это, но не должен правильно помещать его в файл .bashrc .. в итоге с Weather:bash: <tmp>45</tmp>: No such file or directory bash: <tmp>45</tmp>: No such file or directory bash: <tmp>45</tmp>: No such file or directory Today: - º Feels Like: º – John Orion 6 May 2016 в 12:32
  • 2
    его очень поздно, и мне нужно встать менее чем за 5 часов, поэтому я думаю, что сегодня вечером я сделаю тормоз. Я буду больше смотреть на ваш пост завтра и посмотреть, смогу ли я выяснить, где я ошибся. – John Orion 6 May 2016 в 12:43
  • 3
    Я обновил свой пост, попробуйте этот – efthialex 6 May 2016 в 12:52
  • 4
    Я попробовал это как скрипт, и я просто получаю 3 строки, которые говорят line 7: <tmp>64</tmp>: No such file or directory. Я даю вам полезную информацию, потому что ваше объяснение было хорошим и помогло мне понять немного лучше, что происходит с этими командами. У меня почти есть решение the_velour_fog, и я смогу заставить его работать сейчас, когда у меня есть информация из вашего сообщения. Это было высоко оценено. – John Orion 6 May 2016 в 21:42
  • 5
    @JohnOrion Я исправил это. Это сейчас работает – efthialex 7 May 2016 в 23:38

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

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