Как использовать sed, чтобы заменить последние 3 символа из строки

У меня есть проблема, чтобы извлечь количество символов х из строки, и у меня есть трудности с расширением возможностей выражения.

Я попытался использовать команду sed.

Если у меня есть строка example.com.db, мне нужно сохранить "example.com", для этого я использую

sed 's/\.db//g'

Как изменить выражение, чтобы я тоже мог использовать такие файлы example.db.db.com.db,

в этом случае конечный результат мне нужен example.db.db.com

4 ответа

Решение

Ты можешь использовать:

's/.db$//'

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

's/...$//'

удалить последние 3 символа и

's/\.[^\.]*$//'

удалить все после последней точки

Удалить последние три символа из строки

sed 's/.\{3\}$//'

пример

% sed 's/.\{3\}$//' <<< "example.db.db.com.db"
example.db.db.com

Вы были близки, используйте синтаксис Regex $ указывать конец строки, также нет необходимости в глобальном (g) модификатор, так как вы пытаетесь найти только одно совпадение:

sed 's/\.db$//' file.txt

Пример:

$ sed 's/\.db$//' <<<'example.db.db.com.db'
example.db.db.com

$ sed 's/\.db$//' <<<'example.db.com.db'
example.db.com

В седе, $ соответствует концу строки, так что вы можете попробовать

echo example.db.db.com.db | sed 's/\.db$//'

Обратите внимание, что я поставил обратную косую точку, чтобы она соответствовала буквально, иначе она соответствует любому символу.

Другие вопросы по тегам