У меня проблема с извлечением x количества символов из строки, и у меня возникают трудности с расширением возможностей выражения.
Я попытался использовать команду sed.
Если у меня есть строка example.com.db, мне нужно сохранить «example.com», для этого я использую
sed 's/\.db//g'
Как изменить выражение, чтобы я мог использовать этот вид файлов тоже example.db.db.com.db
.
в этом случае конечный результат мне нужен example.db.db.com
можно использовать:
's/.db$//'
альтернативно можно использовать:
's/...$//'
для удаления последних 3 символов и
's/\.[^\.]*$//'
для удаления всего после последней точки
Вы были близки, используете синтаксис 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
В sed, $
соответствия конец строки, таким образом, можно попробовать
echo example.db.db.com.db | sed 's/\.db$//'
Примечание, что я backslashed точка для соответствия буквально иначе это соответствует любому символу.
Удалить последние три символа из строки
sed 's/.\{3\}$//'
<час> Пример
% sed 's/.\{3\}$//' <<< "example.db.db.com.db"
example.db.db.com