Tenho certeza de que deve haver uma maneira mais fácil e confiável, mas pelo menos você pode eliminar o canal para sed
usando grep
com -o
(somente impressões corresponde) e -E
(expressões regulares estendidas):
grep -oE 'SOFTWARE LICENSE AGREEMENT FOR OS X.*[A-Z]' '/System/Library/CoreServices/Setup Assistant.app/Contents/Resources/en.lproj/OSXSoftwareLicense.rtf'
Isso, no entanto, também retorna a parte SOFTWARE LICENSE AGREEMENT FOR OS X
da saída. Se você quer apenas o codinome, você poderia canalizá-lo para sed, mas não exigiria nenhuma referência para trás usando o dreaded -E
flag que BSD sed
é tão famoso por:
grep -oE 'SOFTWARE LICENSE AGREEMENT FOR OS X.*[A-Z]' '/System/Library/CoreServices/Setup Assistant.app/Contents/Resources/en.lproj/OSXSoftwareLicense.rtf' | sed "s/SOFT.*OS X //"
Pessoalmente, prefiro o método awk
:
grep -oE 'SOFTWARE LICENSE AGREEMENT FOR OS X.*[A-Z]' '/System/Library/CoreServices/Setup Assistant.app/Contents/Resources/en.lproj/OSXSoftwareLicense.rtf' | awk -F 'OS X ' '{print $NF}'
Pure awk
solution:
awk '/SOFTWARE LICENSE AGREEMENT FOR OS X/' '/System/Library/CoreServices/Setup Assistant.app/Contents/Resources/en.lproj/OSXSoftwareLicense.rtf' | awk -F 'OS X ' '{print $NF}' | awk '{print substr($0, 0, length($0)-1)}'
(Tenho certeza que há uma maneira de fazer isso sem canalizar para processos awk adicionais, mas eu não sou um profissional.)