У меня есть много таких строк, которые возвращаются из команды bash с разными sourceNodeIds
разной длины цифр:
<NodeAssociation sourceNodeId="33654" [...] sourceNodeEntity="Issue" />
Я хотел бы передать его в sed или awk и просто вернуть номер nnnn из sourceNodeId="nnnn"
что-то вроде:
cat blah | sed 's/.+?sourceNodeId="\(\d+\)".+/\1/'
но это не работает. Я использую Mac, если это имеет значение (я думаю, что версия sed может быть другой). Я знаю регулярные выражения Perl, но я думаю, что sed ожидает другого вида.
Спасибо!!!
sed
не знает о \d
и не жадные совпадения. Вам не нужно использовать cat
. Это должно работать:
sed 's/.*sourceNodeId="\([0-9]\+\)".*/\1/' file
Некоторые sed
версии придирчивы к желанию -e
(будет работать, даже если это не требуется):
sed -e 's/.*sourceNodeId="\([0-9]\+\)".*/\1/' file
Если ваш sed
поддерживает -r
вы можете пропустить экранирование:
sed -er 's/.*sourceNodeId="([0-9]+)".*/\1/' file
Также работает:
cat blah | cut -f2 -d\"