Я ищу, чтобы отобразить строку 4598 в следующем файле. По сути, я хочу отобразить строку ПОСЛЕ n-го вхождения совпадения. В этом случае строка после 3-го появления <Car>
. Как мне это сделать?
<Car>
10456
</Car>
<Car>
70192
</Car>
<Car>
4598
</Car>
Я ищу, чтобы отобразить строку 4598 в следующем файле. По сути, я хочу отобразить строку ПОСЛЕ n-го вхождения совпадения. В этом случае строка после 3-го появления <Car>
. Как мне это сделать?
<Car>
10456
</Car>
<Car>
70192
</Car>
<Car>
4598
</Car>
sed
,awk
или дажеgrep
, желательно использовать синтаксический анализатор XML.Ответы:
Или:
Чтобы передать шаблон поиска в качестве переменной:
Здесь использование
ENVIRON
вместо-v
as-v
расширяет последовательности с обратной косой чертой и обратные косые черты часто встречаются в регулярных выражениях (поэтому их необходимо удваивать-v
).GNU
awk
4.2 или выше позволяет назначать переменные как строго типизированные регулярные выражения . Пока его режим POSIX не включен (например, через$POSIXLY_CORRECT
переменную окружения, вы можете сделать:источник
Вот Perl один:
С помощью GNU
grep
вы также можете анализировать вывод:От
man grep
:источник
С
GNU awk
вами можно сделать:источник
Вот еще один способ с
sed
:Это использует место для подсчета.
Каждый раз, когда он встречает соответствующую
<Car>
ему строку, онx
изменяет буферы и проверяет, есть ли в буфере удержания ровно N-1 вхождений символа. Если проверка прошла успешно, онаx
снова меняется, и если не в последней строке, она вытягиваетn
строку ext иp
набирает пространство шаблона, а затемq
использует. В противном случае он просто добавляет еще один.
символ в область удержания, и ex
меняется обратно.источник
Вот простое решение командной строки.
Если вы измените значение +3 после
tail
, вы можете указать любую n-ю строку.источник