我有一堆看起来像这样的.txt文件:
# title: I Got Stripes
# 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 |
我需要将它们转换成这样的东西:
# title: I Got Stripes
# 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 |
具体来说,这意味着:
我在不同的子目录中有+/- 700个文件。
我正在考虑编写一个sed脚本,但还是不知道该怎么做。
答案 0 :(得分:2)
使用sed
:
sed '/^ *#/b;s/^[^|]*//;s/[^|]*$//' filename
工作原理:
#
开头(#
之前有可选空格),则分支到下一个周期(即不做任何事情)|
|
如果您正在使用BSD sed,请将其拆分:
sed -e '/^ *#/b' -e 's/^[^|]*//;s/[^|]*$//;' filename