Почему мое регулярное выражение не работает с использованием sed в сценарии bash в Mac OSX?

Первоначально init вызывал оболочку на консоли в однопользовательском режиме, а когда эта оболочка выходила, она вызывала программу login (на самом деле getty) на последовательных портах, наряду с монтированием остальных файловых систем и запуском любых демонов, которые были настроены для запуска.

Все это контролировалось записями в /etc/inittab.

Все это присутствовало в версиях Unix для PDP-11 в начале 1970-х годов и, полагаю, до этого.

Есть, конечно, бесконечные детали, но суть такова.

3
18.05.2019, 17:43
3 ответа

Вам нужно добавить -E в командную строку sed , чтобы использовать расширенные регулярные выражения:

sed -E 's/^([A-Za-z]+-[0-9]+)/\1/'

Если вы хотите сократить строку ] CBX-1234 - CBX-5678 - CBX-1234 , вам дополнительно необходимо изменить подстановку, чтобы учесть всю строку:

sed -E 's/^([A-Za-z]+-[0-9]+).*/\1/'

В качестве альтернативы вы можете использовать bash расширение параметра

shortenedString="${string%%--*}"

Это удалит все из $ string из первого появления - .

13
27.01.2020, 21:12

Я всегда использую sed -r

$ echo "abhellocd" | sed -r "s/.*(hello).*/\1/g"
hello

Из справочной страницы sed:

   -r, --regexp-extended
          use extended regular expressions in the script.

Параметр -E мной не указан. Хотя тоже работает.

1
27.01.2020, 21:12

Вы можно использовать echo "$ string" | вырезать -d "-" -f 1,2 .

1
27.01.2020, 21:12

Теги

Похожие вопросы