J’ai un tas de fichiers .txt qui ressemblent à ceci:
# title: I Got Ssortingpes # artist: Johnny Cash # metre: 4/4 # tonic: Db 0.000000000 silence 0.348299319 A, intro, | Cb:maj | Db:maj | Db:maj |, (guitar) 3.931269841 B, verse, | Db:maj | Db:maj | Ab:maj | Ab:maj |, (voice 8.662993197 | Ab:maj | Ab:maj | Db:maj | Db:maj | # tonic: Eb 78.145873015 D, modulation, | Eb:maj | Eb:maj |, (guitar) 80.474625850 B, verse, | Eb:maj | Eb:maj | Bb:maj | Bb:maj |, (voice 85.104784580 | Bb:maj | Bb:maj | Eb:maj | Eb:maj |
et j’ai besoin de les convertir en quelque chose comme ça:
# title: I Got Ssortingpes # artist: Johnny Cash # metre: 4/4 # tonic: Db | Cb:maj | Db:maj | Db:maj | | Db:maj | Db:maj | Ab:maj | Ab:maj | | Ab:maj | Ab:maj | Db:maj | Db:maj | # tonic: Eb | Eb:maj | Eb:maj | | Eb:maj | Eb:maj | Bb:maj | Bb:maj | | Bb:maj | Bb:maj | Eb:maj | Eb:maj |
Plus précisément, cela signifie:
J’ai +/- 700 fichiers, dans différents sous-répertoires.
Je pensais à écrire un script sed, mais je n’arrive pas à comprendre comment le faire.
Utiliser sed
:
sed '/^ *#/b;s/^[^|]*//;s/[^|]*$//' filename
Comment ça marche:
#
(avec des espaces optionnels avant le #
), twigz-vous au cycle suivant (c.-à-d. Ne faites rien) |
|
Si vous utilisez BSD sed, divisez-le:
sed -e '/^ *#/b' -e 's/^[^|]*//;s/[^|]*$//;' filename