我的问题是从字符串中提取 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$//'
请注意,我将点反斜杠化以进行字面匹配,否则它会匹配任何字符。