cat 'Extract Text Output.rtf' | sed -n 's/Order Number : \(.*\)\\/\1/gp'
Выдает именно то, что вы хотите.
Объяснение:
sed -n
подавить вывод по умолчанию sed
s/.../.../g
поиск и замена, g: все / глобально
Order Number : \(.*\)\\
найдите строку « Order Number :
» и backslash
и сохраните все, что между ними, в группу 1; (Недостатком использования sed является необходимость избежать оператора группировки регулярных выражений: (...)
с \(...\)
)
\1
использовать группу 1 в качестве замены
p
печать замены, если есть совпадение
Это гораздо более гибкий и общий способ, чем использование жестко запрограммированных групп awk (7 долларов).
Примечание 1: использовать.*? если у вас есть строки, отформатированные так:
\cf2 Fab Order Number : FAB00772450\ \b \cf2
Это препятствует тому, чтобы регулярное выражение было жадным, и останавливается на первом обратном слэше. Не проверено, поддерживает ли sed *? и +? операторы, но будем надеяться.
Примечание 2: Если у вас есть несколько частей, которые вы хотите извлечь из строки, используйте несколько групп, и в строке замены вы даже можете переключать их с форматированием, например .../\2 - \1/