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/