求一个简单的sed命令删除或替换字符串
[i=s] 本帖最后由 netdzb 于 2019-7-8 16:01 编辑 [/i]list.txt文本内容如下:
01.长亭外
02.怀念战友 电影《冰山上的来客》插曲
03.秋水伊人 电影《古塔奇案》插曲
04.曲蔓地 新疆民歌
05.歌唱二小放牛郎
06.鼓浪屿之波
07.**人永远是年轻 歌剧《星星之火》选曲
08.草原上升起不落的太阳
09.渔光曲 电影《渔光曲》插曲 (推荐曲目)
10.长城谣 (推荐曲目)
11.春天里 电影《十字街头》插曲
In Spring Time
12.可爱的一朵玫瑰花
13.翻身农奴把歌唱 纪录影片《今日西藏》主题歌
14.难忘今宵
要求执行以后成为
长亭外
怀念战友 电影《冰山上的来客》插曲
秋水伊人 电影《古塔奇案》插曲
曲蔓地 新疆民歌
歌唱二小放牛郎
鼓浪屿之波
**人永远是年轻 歌剧《星星之火》选曲
草原上升起不落的太阳
渔光曲 电影《渔光曲》插曲 (推荐曲目)
长城谣 (推荐曲目)
春天里 电影《十字街头》插曲
可爱的一朵玫瑰花
翻身农奴把歌唱 纪录影片《今日西藏》主题歌 [b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=221729&ptid=53285]1#[/url] [i]netdzb[/i] [/b]
又比如,我想把01.替换成dig我用这个命令为啥不对啊?
sed -E "s/^[0-9][0-9]\./dig/g" > list.txt [b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=221730&ptid=53285]2#[/url] [i]netdzb[/i] [/b]
你文件名参数都没有,就直接重定向了。[code]sed -E "s/^[0-9][0-9]\./dig/g" list.txt >list2.txt[/code] [i=s] 本帖最后由 netdzb 于 2019-7-8 15:45 编辑 [/i]
[b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=221731&ptid=53285]3#[/url] [i]cfwyy77_bat[/i] [/b]
如果想把01.之类的去掉该怎么弄?
自己知道了,应该这样
sed -E "s/^[0-9][0-9]\./''/g" list.txt >list2.txt
还是不对,变成这样了。
''长亭外
''怀念战友 电影《冰山上的来客》插曲
''秋水伊人 电影《古塔奇案》插曲
''曲蔓地 新疆民歌
''歌唱二小放牛郎
''鼓浪屿之波
''**人永远是年轻 歌剧《星星之火》选曲
''草原上升起不落的太阳
''渔光曲 电影《渔光曲》插曲 (推荐曲目)
''长城谣 (推荐曲目)
''春天里 电影《十字街头》插曲
''可爱的一朵玫瑰花
''翻身农奴把歌唱 纪录影片《今日西藏》主题歌 [b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=221731&ptid=53285]3#[/url] [i]cfwyy77_bat[/i] [/b]
终于可以了,是这样写。
sed -E "s/^[0-9][0-9]\.//g" xuan.txt > list.txt [b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=221731&ptid=53285]3#[/url] [i]cfwyy77_bat[/i] [/b]
是这样的,我想把这个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 [b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=221734&ptid=53285]5#[/url] [i]netdzb[/i] [/b]
是不是这样就可以了,可是执行结果不对啊。
sed -E "/TRACK[0-9][0-9]/'变量'/g" cue.txt >mycue.txt
执行完成,mycue.txt是空的啊。 [i=s] 本帖最后由 cfwyy77_bat 于 2019-7-8 17:13 编辑 [/i]
cue文件格式,不是很了解,百度了一下,你要用歌词名 去替换TRACK?这个不对吧, 你想要改的是TITLE 后面的内容吧?
你说别人一行脚本,是什么发出来看看。 [b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=221737&ptid=53285]8#[/url] [i]cfwyy77_bat[/i] [/b]
#!/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通不过。 [b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=221737&ptid=53285]8#[/url] [i]cfwyy77_bat[/i] [/b]
sed -E "s/Track[0-9][0-9]/$变量/" cue.txt > mycue.txt
现在我要解决的问题是sed命令如何只替换搜索到第一次的匹配项。
上面的脚本是全部替换掉的,那我从list.txt读取歌名的时候,
只能是被替换了第一首歌名,因为第二次从list.txt读到第2首歌曲的
时候,匹配想的Track都被替换了,匹配不到了。这个到底用什么办法
解决? [b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=221739&ptid=53285]10#[/url] [i]netdzb[/i] [/b]
就按你给的别人脚本,稍改一下,list.txt就按原始的带数字序号的,就应该可以得到你想要的了。我这运行没问题。[code]
#!/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
[/code]至于你说全部被替换,当然是这样的,因为替换时的你写的正则是 /Track[0-9][0-9]/ 这么写当然所有Track01,Track02...都能匹配,都会被替换的。
页:
[1]