Regx, чтобы удалить вывод из двух последних тире - PullRequest
0 голосов
/ 18 декабря 2018

У меня может быть два входа 1234-5-8888-8978 или 1234-8888-8978. Я просто хочу удалить строку после последней черты (hypen).

вход: 1234-5-8888-8978 выход: 1234-5 (удалить содержимое после двух последних объявлений): 1234-8888-8978 вывод: 1234 (удалить содержимое после двух объявлений)

Я использую что-то

echo "1234-5-8888-8978" | sed -n  's/.*\(-[0-9]*-[0-9]*$\)/\1/p'
-8888-8978

echo "1234-8888-8978" | sed -n  's/.*\(-[0-9]*-[0-9]*$\)/\1/p'
-8888-8978

Ноя хочу вывод исключить этот шаблон

1 Ответ

0 голосов
/ 18 декабря 2018

Вам нужно захватить часть перед дефисами:

sed 's/\(.*\)-[0-9]*-[0-9]*$/\1/' <<< "1234-5-8888-8978"
# => 1234-5 (POSIX BRE)
sed -E  's/(.*)-[0-9]*-[0-9]*$/\1/' <<< "1234-8888-8978"
# => 1234 (POSIX ERE)

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

Но более уместно просто удалить последние 2 частимежду дефисами, такими как

sed 's/-[0-9]*-[0-9]*$//' <<< "1234-5-8888-8978"
# => 1234-5 (POSIX BRE will suffice)

См. другое демо

Шаблон -[0-9]*-[0-9]*$ соответствует -, за которым следуют 0+ цифр два раза в конце строки,Его можно записать как (-[0-9]*){2}$ в синтаксисе POSIX ERE и как \(-[0-9]*\)\{2\}$ в синтаксисе POSIX BRE.

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