首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >复制文件中的字符串并使用sed覆盖另一个字符串

复制文件中的字符串并使用sed覆盖另一个字符串
EN

Stack Overflow用户
提问于 2018-05-29 08:16:51
回答 2查看 92关注 0票数 1

我正在尝试用sed批量编辑一个多行的M3U文件,内容如下:

代码语言:javascript
复制
#EXTINF:-1 tvg-id="NBC.us" tvg-name="NBC US" tvg-logo="http://example.com/NBC.us.png" tvg-chno="12" group-title="United States",NBC

我想要查找/替换,这样我就可以得到如下结果:

代码语言:javascript
复制
#EXTINF:-1 tvg-id="NBC.us" tvg-name="NBC" tvg-logo="http://example.com/NBC.us.png" channelid="12" group-title="United States",NBC

换句话说,我需要查找/替换channelidtvg-chno,并将字符串从(不包括)最后一个,复制到行尾,并使用它覆盖tvg-name的内容。我有一个sed命令在第一个比特上工作,一个坏掉的命令在第二个比特上不能像预期的那样工作,如下所示:

代码语言:javascript
复制
sed -i 's/tvg-chno/channel-id/g' test.m3u    
sed -i 's/\(.*tvg-name="\)\(.*"\)\(.*",\)\(.*\)/\1\4\3\4/g' test.m3u

第二个sed命令输出:

代码语言:javascript
复制
#EXTINF:-1 tvg-id="NBC.us" tvg-name="NBCUnited States",NBC

如果可能的话,我希望能够在一行程序中完成所有的转换。

感谢您的帮助!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-05-29 08:46:54

为了避免获取过多的旧值,第二个命令应该是:

代码语言:javascript
复制
's/\(tvg-name="\)\([^"]*\)\(".*",\)\(.*\)/\1\4\3\4/'

要将这两个命令合并为一个命令,只需使用分号将它们连接起来:

代码语言:javascript
复制
sed -i 's/.../.../g;s/.../.../' test.m3u
票数 1
EN

Stack Overflow用户

发布于 2018-05-29 15:15:22

这可能适用于您(GNU sed):

代码语言:javascript
复制
sed -r 's/(tvg-name=")[^"]*(".*)tvg-chno(.*,([^,]*))$/\1\4\2channelid\3/' file

在字符串上进行模式匹配,并使用反向引用来实现所需的结果。

注意:这假设tvg-chno将始终跟随tvg-name,如果不是,将需要两次替换。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50574739

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档