Сед от постоянного регулярного выражения - PullRequest
2 голосов
/ 23 сентября 2019

Я попытался удалить ненужные символы

%H1256
*+E1111
  *;E2311
   +-'E3211
      {E4511
       DE4513

, поэтому я попытался с помощью этой команды

sed 's/+E[0-9]/E/g

, но она не удалит пробелы, и цифры должныбыть сохраненным.

ожидается:

H1256
E1111
E2311
E3211
E4511
E4513
РЕДАКТИРОВАТЬ

Особая благодарность https://stackoverflow.com/users/3832970/wiktor-stribiżew мои дни были спасены им

sed -n 's/.*\([A-Z][0-9]*\).*/\1/p' file or grep -oE '[A-Z][0-9]+' file

Ответы [ 2 ]

2 голосов
/ 23 сентября 2019

Это должно сделать работу:

sed -E 's/^[^[:alnum:]]+//' file

Или, если вам нужны только последние 5 символов

sed -E 's/.*(.{5})$/\1/' file
2 голосов
/ 23 сентября 2019

Вы можете использовать sed:

sed -n 's/.*\([[:upper:]][[:digit:]]*\).*/\1/p' file

или grep:

grep -oE '[[:upper:]][[:digit:]]+' file

См. онлайн-демонстрацию

Обычно шаблоны соответствуют заглавной букве ([[:upper:]]), за которой следуют цифры ([[:digit:]]* соответствует 0 или более цифрам в решении POSIX BRE sed, а [[:digit:]]+ соответствует 1+ цифрам в решении POSIX ERE grep).

Хотя решение sed будет извлекать по одному значению (последнему) из каждой строки, grep извлечет все значения, найденные во всех строках.

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