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