如何使用 sed 替换字符串中的最后 3 个字符

如何使用 sed 替换字符串中的最后 3 个字符

我的问题是从字符串中提取 x 个字符,并且我很难扩大表达式的能力。

我曾尝试使用 sed 命令。

如果我有字符串 example.com.db,我需要保留“example.com”,为此我使用

sed 's/\.db//g'

如何改变表达方式以便我也可以使用这类文件example.db.db.com.db

在这种情况下我需要的最终结果是example.db.db.com

答案1

您可以使用:

's/.db$//'

或者你也可以使用:

's/...$//'

删除最后 3 个字符并

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

删除最后一个点后的所有内容

答案2

您已经接近了,使用 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

答案3

从字符串中删除最后三个字符

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

例子

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

答案4

在 sed 中,$匹配行尾,因此您可以尝试

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

请注意,我将点反斜杠化以进行字面匹配,否则它会匹配任何字符。

相关内容