Esta é basicamente a mesma abordagem que sugerida pelo Markus, apenas uma sintaxe ligeiramente diferente:
shopt -s globstar
perl -pe 's|((\.\./){2}Classical)/European/|/Western/|' ~/Music/**/*m3u
Explicação
-
shopt -s globstar: este comando ativa a opção globstar do bash, que torna**igual a todos os arquivos e zero ou mais diretórios e subdiretórios. Portanto,~/Music/**/*m3ucorresponderá a todos os arquivos (e diretórios) em~/Musicou seus subdiretórios cujo nome terminará emm3u. -
perl -pe: p digite cada linha de entrada depois de aplicar o script fornecido por-ea ela. -
s|((\.\./){2}Classical)/European/|/Western/|: este é o operador de substituição. Seu formato geral és|foo|bar|, que substituiráfooporbar. A forma mais comum és/foo/bar/, mas os delimitadores podem ser qualquer caractere. Como aqui queremos combinar algo que contenha/, usei|como delimitador para maior clareza. -
(\.\./){2}: corresponde a../exatamente duas vezes. Como.significa "qualquer caractere" em expressões regulares, eles precisam ser escapados (\.). Os parênteses aqui são usados para agrupar o\.\./para que o{2}se aplique ao grupo. -
((\.\./){2}Classical): os parênteses aqui são usados novamente para formar um grupo, mas desta vez é para nos referirmos ao grupo comono lado direito da substituição. É por isso que substituímos por/Western, porqueé o que foi correspondido por(\.\./){2}Classical.
Se isso acontecer, execute-o novamente com a opção -i para editá-lo:
perl -i.bak -pe 's|((\.\./){2}Classical)/European/|/Western/|' ~/Music/**/*m3u
O -i.bak fará com que ele edite o arquivo e crie um backup do original com o mesmo nome e a extensão .bak .