Обычно вы должны использовать правильный парсер для обработки xml. Но в awk
:
awk 'match($0, /<[^\/>]+/) { \
$0 = substr($0, 1, RSTART+RLENGTH-1) " order=\"" ++i "\"" \
substr($0, RSTART+RLENGTH) \
}; 1'
Я ищу открывающий тег (без части >
или />
) на каждой строке. Если найдено, поместите строку order="i"
после нее, увеличивая i
. Один 1
в последней строке просто всегда выполняет действие awk
по умолчанию: { print $0 }
.
Я обновил регулярное выражение для работы с вашим исправленным вводом. Сбой происходит, как только у вас есть несколько открывающих тегов в одной строке и т. Д.