сопоставить 32-байтовое значение хеша с sed - PullRequest
1 голос
/ 16 октября 2019

Я хотел бы извлечь значения хеша с помощью sed из таких строк:

[129.173.213.225:52196] some_text: another_text --> eb1d94daa7e0344597e756a1fb6e7054

Желаемый результат просто имеет 32-байтовое значение хеша, eb1d94daa7e0344597e756a1fb6e7054в этом примере.

Итак, я попробовал следующую команду с regexp (идея состоит в том, чтобы удалить все, кроме сопоставленного шаблона):

% sed 's/\([0-9a-f]{32}\)$/\1/g' < file

, что приводит к ошибке:

sed: -e expression #1, char 20: invalid reference \1 on `s' command's RHS

Передача -r в sed не помогла, я получаю ту же ошибку.

Я думаю, что само регулярное выражение правильно, потому что sed -r 's/[0-9a-f]{32}$/XXX/g' заменяет 32-байтовое значение хеш-функции наXXX строкаНо я хочу удалить все строки, кроме значения хеш-функции.

% cat /etc/issue
Ubuntu 16.04.6 LTS \n \l

%
% ls -la `which sed`
-rwxr-xr-x 1 root root 73424 Feb 11  2016 /bin/sed
%

Что я делаю не так?

Ответы [ 2 ]

1 голос
/ 16 октября 2019

Вы можете попытаться заменить все, вплоть до --> строки, пустой строкой: т.е. заменить то, что соответствует .* -->.

Таким образом, команда будет иметь вид:

sed 's/.* -->//g' < file

Даже если some_text содержит символ стрелки, мы используем жадное регулярное выражение , которое будет соответствовать столько, сколько может.

Результат строки примера приведен ниже:

«~» $ sed 's/.* -->//g' < testregex 
 eb1d94daa7e0344597e756a1fb6e7054
0 голосов
/ 16 октября 2019

Вы также можете использовать awk для этого

awk '/-->/ {print $NF}' file

Он найдет строки с -->, затем напечатает последнее поле.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...