Как мне искать что-нибудь между этими тегами - PullRequest
0 голосов
/ 09 июля 2010

Как мне искать что-либо между этими тегами, я хотел бы перечислить все случаи, где есть некоторое значение между xml-элементом f: facet

<f:facet name="header">Name</f:facet>

Ответы [ 2 ]

1 голос
/ 11 июля 2010

В этом списке будет указано, что происходит между тегами <f:facet>:

sed 's/<f:facet[^>]*>\([^<]*\)<\/f:facet>/\1/'

Этот тест:

echo '<f:facet name="header">Name</f:facet>' | sed 's/<f:facet[^>]*>\([^<]*\)<\/f:facet>/\1/'

Выводит это:

Name

Чтобы запустить его для всех файлов в текущем каталоге:

sed 's/<f:facet[^>]*>\([^<]*\)<\/f:facet>/\1/' *

Чтобы запустить его для всех файлов во всех каталогах в общем каталоге:

find /path/to/common -type f -print0 | xargs -0 sed 's/<f:facet[^>]*>\([^<]*\)<\/f:facet>/\1/'

Если вы запускаете find из командной строки Windows CMD.EXE, вы, вероятно, получаете Windows FIND.EXE, которая выдает это сообщение об ошибке. Попробуйте find --help и find /?. Первый - это GNU find, а второй - Windows. Если первый выдает сообщение об ошибке, а второй - текст справки, это подтвердит проблему.

Вместо этого вам нужно будет запустить экземпляр Cygwin.

1 голос
/ 09 июля 2010

, если каждый тег f:facet находится на отдельной строке, вы можете сделать так:

cat file.xml | sed -ne 's/<f:facet[^>]*>//;s/<\/f:facet>//p'|grep Name

если вы хотите просмотреть несколько файлов, вы можете сделать:

find . -type f| xargs sed -ne 's/<f:facet[^>]*>//;s/<\/f:facet>//p'
...