Удаление шаблона в конце строки с помощью sed или других инструментов bash

Я хотел бы удалить любую ABC в конце строки.

Лучшее, что я придумал, это

echo ${String}| sed -e 's/["ABC"]*$//g'

Однако он удалит все A, или B или C в конце строки.

Если String - DAAAAABCBBBCCABCABC, если я использую указанное выше выражение, оно вернет "D" вместо "DAAAAABCBBBCC",

Есть ли лучший способ сделать это? Благодарю.

Ответ 1

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

echo "DAAAAABCBBBCCABCABC" | sed -e 's/\(ABC\)*$//g'

Результат:

DAAAAABCBBBCC

Строка окружения между круглыми скобками и * применяется ко всем буквам внутри них в этом точном порядке.

Ответ 2

bash может сделать это внутренне. Следующее удаляет строку "ABC" в конце, и ее результат может использоваться при назначении переменной, команде или что-то еще:

${String%ABC}

См. Http://tldp.org/LDP/abs/html/string-manipulation.html.

Ответ 3

Вы должны использовать:

sed -E 's/(ABC)+$//'

ИЛИ:

sed -r 's/(ABC)+$//'

Оба будут выдавать результат:

DAAAAABCBBBCC