批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程
[批处理文件精品]批处理版照片整理器[批处理文件精品]纯批处理备份&还原驱动在线第三方下载
返回列表 发帖

[问题求助] 求一个简单的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.难忘今宵


要求执行以后成为

长亭外
怀念战友 电影《冰山上的来客》插曲
秋水伊人 电影《古塔奇案》插曲
曲蔓地 新疆民歌
歌唱二小放牛郎
鼓浪屿之波
**人永远是年轻 歌剧《星星之火》选曲
草原上升起不落的太阳
渔光曲 电影《渔光曲》插曲 (推荐曲目)
长城谣 (推荐曲目)
春天里 电影《十字街头》插曲
可爱的一朵玫瑰花
翻身农奴把歌唱 纪录影片《今日西藏》主题歌

回复 1# netdzb

又比如,我想把01.替换成dig我用这个命令为啥不对啊?

sed -E "s/^[0-9][0-9]\./dig/g" > list.txt

TOP

回复 2# netdzb

你文件名参数都没有,就直接重定向了。
  1. sed -E "s/^[0-9][0-9]\./dig/g" list.txt >list2.txt
复制代码

TOP

本帖最后由 netdzb 于 2019-7-8 15:45 编辑

回复 3# cfwyy77_bat

如果想把01.之类的去掉该怎么弄?

自己知道了,应该这样

sed -E "s/^[0-9][0-9]\./''/g" list.txt >list2.txt

还是不对,变成这样了。

''长亭外
''怀念战友 电影《冰山上的来客》插曲
''秋水伊人 电影《古塔奇案》插曲
''曲蔓地 新疆民歌
''歌唱二小放牛郎
''鼓浪屿之波
''**人永远是年轻 歌剧《星星之火》选曲
''草原上升起不落的太阳
''渔光曲 电影《渔光曲》插曲 (推荐曲目)
''长城谣 (推荐曲目)
''春天里 电影《十字街头》插曲
''可爱的一朵玫瑰花
''翻身农奴把歌唱 纪录影片《今日西藏》主题歌

TOP

回复 3# cfwyy77_bat

终于可以了,是这样写。

sed -E "s/^[0-9][0-9]\.//g" xuan.txt > list.txt

TOP

回复 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

TOP

回复 5# netdzb

是不是这样就可以了,可是执行结果不对啊。

sed -E "/TRACK[0-9][0-9]/'变量'/g" cue.txt >mycue.txt

执行完成,mycue.txt是空的啊。

TOP

本帖最后由 cfwyy77_bat 于 2019-7-8 17:13 编辑

cue文件格式,不是很了解,百度了一下,你要用歌词名 去替换TRACK?这个不对吧, 你想要改的是TITLE 后面的内容吧?
你说别人一行脚本,是什么发出来看看。

TOP

回复 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通不过。

TOP

回复 8# cfwyy77_bat

sed -E "s/Track[0-9][0-9]/$变量/" cue.txt > mycue.txt
      
现在我要解决的问题是sed命令如何只替换搜索到第一次的匹配项。
上面的脚本是全部替换掉的,那我从list.txt读取歌名的时候,
只能是被替换了第一首歌名,因为第二次从list.txt读到第2首歌曲的
时候,匹配想的Track都被替换了,匹配不到了。这个到底用什么办法
解决?

TOP

回复 10# netdzb

就按你给的别人脚本,稍改一下,list.txt就按原始的带数字序号的,就应该可以得到你想要的了。我这运行没问题。
  1. #!/bin/bash
  2. while read LINE
  3. do
  4.     TITLE=`echo ${LINE#*.} | tr -d '\r'`
  5.     sed -i "s#TITLE \"Track${LINE%%.*}\"#TITLE \"${TITLE}\"#" cue.txt
  6. done < list.txt
复制代码
至于你说全部被替换,当然是这样的,因为替换时的你写的正则是 /Track[0-9][0-9]/  这么写当然所有Track01,Track02...都能匹配,都会被替换的。

TOP

返回列表