如何用sed删除网址中连字符到首个点之间的内容?
解决sed删除网址中特殊接口名的问题
嘿,我来帮你搞定这个sed的问题!你之前用的sed 's/-.*^.//'之所以无效,是因为正则表达式的逻辑完全不对——.*会贪婪匹配所有内容,而且^是匹配行首的符号,根本没定位到你要删除的接口名部分。
正确的sed命令
你需要精准匹配从-开始到下一个.之间的所有字符,然后把这部分替换为空。用这个命令就可以完美解决:
sed 's/-[^.]*//'
命令逻辑解释
-:精准匹配网址里的连字符[^.]*:这是反向字符集,表示匹配任意**不是.**的字符,*表示匹配零次或多次,刚好能覆盖INT1、INT2、INT这些不同格式的接口名,不会误删后面的域名部分
测试示例
把你的输入内容放到文件(比如urls.txt)里,执行命令后就能得到你想要的结果:
# 输入内容 aaaaaaa-INT1.aaaa.aaaa.com bbbbbbb-INT2.bbbb.bbbb.com ccccccc-INT.cccc.cccc.com # 执行命令 sed 's/-[^.]*//' urls.txt # 输出结果 aaaaaaa.aaaa.aaaa.com bbbbbbb.bbbb.bbbb.com ccccccc.cccc.cccc.com
进阶:直接修改原文件
如果你想直接修改原文件而不是只输出到终端,可以加上-i参数(原地编辑):
# Linux系统 sed -i 's/-[^.]*//' urls.txt # macOS系统(需要额外加空字符串参数) sed -i '' 's/-[^.]*//' urls.txt
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

