2016-02-03 3 views
0

У меня есть список воспроизведения, например, как показано ниже:изменить файл с помощью СЭД или AWK

>#EXTM3U 
>#EXTINF:654,filenameSong1.aiff 
>/Users/myname/Music/folder1/filenameSong1.aiff 
>#EXTINF:198,filenamesong2.mp4 
>/Users/myname/Music/folder1/subfolder2/filenameSong2.mp4 
>#EXTINF:217,filenameSong3.mp3 
>/Users/myname/Music/folder1/subfolder3/filenameSong3.mp3 
>#EXTINF:341,filenameSong4.mp4 
>/Users/myname/Music/folder1/subfolder3/filenameSong4.mp4 

Я хотел бы изменить этот файл, используя СЭД или AWK или комбинацию из двух

таким образом, что filenameSong остается, но корни стать «/ MUSIC/ например

/Users/myname/Music/folder1/subfolder3/filenameSong4.mp4 становится /MUSIC/filenameSong4.mp4 или /MUSIC/NEWFOLDERNAME/filenameSong4.mp4

с возможностью добавления нового имени папки после папки MUSIC. Я думаю, что если бы я мог найти способ изменить выражение в команде Sed или/и использовать команду basename для каждой строки.

Может кто-то мне помочь Как я могу это сделать?

ответ

0

Предполагая, «>» символов в вашем примере текста являются фактический текст, а не какой-то артефакт форматирования:

sed '[email protected]^>/Users.*/@>/MUSIC/@' input 

Если вы хотите вариант для подкаталога:

#!/bin/sh 

sed "[email protected]^>/Users.*/@>/MUSIC${1+/}$1/@" input 
+0

спасибо за ответ. Я новичок здесь. Я думал, что мне нужно поставить «>», чтобы заблокировать мой код. мой скрипт не содержит никаких «>» – siamak

+0

Спасибо. Я удалил только «>» из вашего кода и сделал именно то, что хотел. Предполагая, что я могу добавить переменную или имя нового имени папки после MUSIC и сможет добавить необязательное новое имя папки. – siamak

+0

oops: когда я запускаю sed «s @ ^/Users. */@/MUSIC /« $ NewFolderName »$ {1 + /} $ 1/@" "$ 1" – siamak

Смежные вопросы