Все следующие методы печатают то, что в [
и ]
но только если это - последнее поле:
ps aux | awk '$NF~/\[/{print $NF}'
Преимущество состоит в том, что это будет только соответствовать a [
в последнем поле. Эквивалентное использование grep
ps aux | grep -o '\[.*\]$'
Можно также сделать это с Perl
ps aux | perl -lne '/(\[.+?\])$/ && print $1'
И sed
:
ps aux | sed -n 's/.*\(\[.*\]\)$/\1/p'
grep
по умолчанию возвращает только совпадений для двоичных файлов.
Вам нужно будет указать grep
, чтобы двоичные файлы обрабатывались как текст.
grep -a -b 'EXTH' Agent_of_Change.mobi
Однако grep
предупреждает вас о возможных последствиях:
option. If TYPE is text, grep processes a binary file as if it
were text; this is equivalent to the -a option. Warning: grep
--binary-files=text might output binary garbage, which can have
nasty side effects if the output is a terminal and if the
terminal driver interprets some of it as commands.
Добавьте -a
для принудительной печати совпадений, даже если они кажутся непечатаемыми.
Добавьте -o
и он будет печатать только "EXTH" вместо строки. Это также изменит смещение байтов - будет выведено смещение "EXTH" вместо смещения начала строки, содержащей "EXTH". Если файл на самом деле не состоит из строк, это будет улучшением!
Или используйте perl -n0777e 'print pos()-length($&),"\n" while /EXTH/g'
для замены зависимости от GNU grep на зависимость от чего-то более универсального... (Предупреждение: засовывает весь файл в память, может быть неприятно для больших файлов)