Как использовать 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$//'
Обратите внимание, что я поставил обратную косую точку, чтобы она соответствовала буквально, иначе она соответствует любому символу.