Удаление рисунка в конце строки с помощью sed или других инструментов bash - PullRequest
17 голосов
/ 08 февраля 2012

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

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

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

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

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

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

Ответы [ 3 ]

20 голосов
/ 28 сентября 2012

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

${String%ABC}

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

13 голосов
/ 08 февраля 2012

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

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

Результат:

DAAAAABCBBBCC

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

5 голосов
/ 08 февраля 2012

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

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

ИЛИ:

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

Оба будут выдавать:

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