标题: [问题求助] 求一个简单的sed命令删除或替换字符串 [打印本页]
作者: netdzb 时间: 2019-7-8 14:42 标题: 求一个简单的sed命令删除或替换字符串
本帖最后由 netdzb 于 2019-7-8 16:01 编辑
list.txt文本内容如下:
01.长亭外
02.怀念战友 电影《冰山上的来客》插曲
03.秋水伊人 电影《古塔奇案》插曲
04.曲蔓地 新疆民歌
05.歌唱二小放牛郎
06.鼓浪屿之波
07.**人永远是年轻 歌剧《星星之火》选曲
08.草原上升起不落的太阳
09.渔光曲 电影《渔光曲》插曲 (推荐曲目)
10.长城谣 (推荐曲目)
11.春天里 电影《十字街头》插曲
In Spring Time
12.可爱的一朵玫瑰花
13.翻身农奴把歌唱 纪录影片《今日西藏》主题歌
14.难忘今宵
要求执行以后成为
长亭外
怀念战友 电影《冰山上的来客》插曲
秋水伊人 电影《古塔奇案》插曲
曲蔓地 新疆民歌
歌唱二小放牛郎
鼓浪屿之波
**人永远是年轻 歌剧《星星之火》选曲
草原上升起不落的太阳
渔光曲 电影《渔光曲》插曲 (推荐曲目)
长城谣 (推荐曲目)
春天里 电影《十字街头》插曲
可爱的一朵玫瑰花
翻身农奴把歌唱 纪录影片《今日西藏》主题歌
作者: netdzb 时间: 2019-7-8 15:05
回复 1# netdzb
又比如,我想把01.替换成dig我用这个命令为啥不对啊?
sed -E "s/^[0-9][0-9]\./dig/g" > list.txt
作者: cfwyy77_bat 时间: 2019-7-8 15:24
回复 2# netdzb
你文件名参数都没有,就直接重定向了。- sed -E "s/^[0-9][0-9]\./dig/g" list.txt >list2.txt
复制代码
作者: netdzb 时间: 2019-7-8 15:31
本帖最后由 netdzb 于 2019-7-8 15:45 编辑
回复 3# cfwyy77_bat
如果想把01.之类的去掉该怎么弄?
自己知道了,应该这样
sed -E "s/^[0-9][0-9]\./''/g" list.txt >list2.txt
还是不对,变成这样了。
''长亭外
''怀念战友 电影《冰山上的来客》插曲
''秋水伊人 电影《古塔奇案》插曲
''曲蔓地 新疆民歌
''歌唱二小放牛郎
''鼓浪屿之波
''**人永远是年轻 歌剧《星星之火》选曲
''草原上升起不落的太阳
''渔光曲 电影《渔光曲》插曲 (推荐曲目)
''长城谣 (推荐曲目)
''春天里 电影《十字街头》插曲
''可爱的一朵玫瑰花
''翻身农奴把歌唱 纪录影片《今日西藏》主题歌
作者: netdzb 时间: 2019-7-8 15:49
回复 3# cfwyy77_bat
终于可以了,是这样写。
sed -E "s/^[0-9][0-9]\.//g" xuan.txt > list.txt
作者: netdzb 时间: 2019-7-8 16:05
回复 3# cfwyy77_bat
是这样的,我想把这个list.txt的歌名替换到cue文件对应的TRACK上面该怎么弄?
别人写的一行的脚本,一是我看不懂,二也跑不通。所以自己想学习写一个。
主要是适合初学者能够理解的写法。
PERFORMER "古璇-《璇曲蔓地(一)XRCD》"
TITLE "古璇-《璇曲蔓地(一)XRCD》"
FILE "璇曲蔓地(一)XRCD.wav" WAVE
TRACK 01 AUDIO
TITLE "Track01"
PERFORMER "古璇"
INDEX 01 00:00:00
TRACK 02 AUDIO
TITLE "Track02"
PERFORMER "古璇"
INDEX 00 03:33:24
INDEX 01 03:36:25
TRACK 03 AUDIO
TITLE "Track03"
PERFORMER "古璇"
INDEX 00 08:19:67
INDEX 01 08:25:12
TRACK 04 AUDIO
TITLE "Track04"
PERFORMER "古璇"
INDEX 00 13:35:39
INDEX 01 13:39:25
TRACK 05 AUDIO
TITLE "Track05"
PERFORMER "古璇"
INDEX 00 17:14:33
INDEX 01 17:18:00
TRACK 06 AUDIO
TITLE "Track06"
PERFORMER "古璇"
INDEX 00 22:33:05
INDEX 01 22:36:12
TRACK 07 AUDIO
TITLE "Track07"
PERFORMER "古璇"
INDEX 00 26:52:47
INDEX 01 26:57:00
TRACK 08 AUDIO
TITLE "Track08"
PERFORMER "古璇"
INDEX 00 30:37:06
INDEX 01 30:40:12
TRACK 09 AUDIO
TITLE "Track09"
PERFORMER "古璇"
INDEX 00 34:54:04
INDEX 01 34:58:25
TRACK 10 AUDIO
TITLE "Track10"
PERFORMER "古璇"
INDEX 00 40:41:51
INDEX 01 40:44:62
TRACK 11 AUDIO
TITLE "Track11"
PERFORMER "古璇"
INDEX 00 44:19:69
INDEX 01 44:24:62
TRACK 12 AUDIO
TITLE "Track12"
PERFORMER "古璇"
INDEX 00 49:20:24
INDEX 01 49:23:37
TRACK 13 AUDIO
TITLE "Track13"
PERFORMER "古璇"
INDEX 00 53:53:22
INDEX 01 53:56:25
TRACK 14 AUDIO
TITLE "Track14"
PERFORMER "古璇"
INDEX 00 58:07:20
INDEX 01 58:10:62
作者: netdzb 时间: 2019-7-8 16:29
回复 5# netdzb
是不是这样就可以了,可是执行结果不对啊。
sed -E "/TRACK[0-9][0-9]/'变量'/g" cue.txt >mycue.txt
执行完成,mycue.txt是空的啊。
作者: cfwyy77_bat 时间: 2019-7-8 17:05
本帖最后由 cfwyy77_bat 于 2019-7-8 17:13 编辑
cue文件格式,不是很了解,百度了一下,你要用歌词名 去替换TRACK?这个不对吧, 你想要改的是TITLE 后面的内容吧?
你说别人一行脚本,是什么发出来看看。
作者: netdzb 时间: 2019-7-8 17:27
回复 8# cfwyy77_bat
#!/bin/bash
while read LINE
do
TITLE=`echo ${LINE#*.} | tr -d '\r'`
sed -i 's#TITLE "Track'${LINE%%.*}'"#TITLE "'${TITLE}'"#g' b.txt
done < a.txt
这个脚本在msys 1.0通不过。
作者: netdzb 时间: 2019-7-8 17:32
回复 8# cfwyy77_bat
sed -E "s/Track[0-9][0-9]/$变量/" cue.txt > mycue.txt
现在我要解决的问题是sed命令如何只替换搜索到第一次的匹配项。
上面的脚本是全部替换掉的,那我从list.txt读取歌名的时候,
只能是被替换了第一首歌名,因为第二次从list.txt读到第2首歌曲的
时候,匹配想的Track都被替换了,匹配不到了。这个到底用什么办法
解决?
作者: cfwyy77_bat 时间: 2019-7-9 08:24
回复 10# netdzb
就按你给的别人脚本,稍改一下,list.txt就按原始的带数字序号的,就应该可以得到你想要的了。我这运行没问题。- #!/bin/bash
- while read LINE
- do
- TITLE=`echo ${LINE#*.} | tr -d '\r'`
- sed -i "s#TITLE \"Track${LINE%%.*}\"#TITLE \"${TITLE}\"#" cue.txt
- done < list.txt
复制代码
至于你说全部被替换,当然是这样的,因为替换时的你写的正则是 /Track[0-9][0-9]/ 这么写当然所有Track01,Track02...都能匹配,都会被替换的。
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |