2

У меня есть файл .ini с этим шаблоном:

[Preset0]
Data=78367571EE5E
Data_1=3483290482
Data_2=299230-293
Data_3=2390920391
Name=Mono Lead
Len=3994
[Preset1]
Data=78367571EE5E
Data_1=3483290482
Data_2=299230-293
Data_3=2390920391
Name=Funky Bass
Len=4001
[Preset2]
Data=0200002E3434
Data_1=342EFD340433
Data_2=000000043425
Data_3=EDFE00000000
Name=Airy Pad
Len=3713

Каждый набор данных от [PresetX] до Len=X представляет одну предустановку. Я хочу расположить этот список в алфавитном порядке по Name=X Однако мне нужно, чтобы первый пресет в файле был [Preset0] и мне нужно, чтобы пресеты оставались в числовом порядке. Итак, мой желаемый результат будет:

[Preset0]
Data=0200002E3434
Data_1=342EFD340433
Data_2=000000043425
Data_3=EDFE00000000
Name=Airy Pad
Len=3713
[Preset1]
Data=78367571EE5E
Data_1=3483290482
Data_2=299230-293
Data_3=2390920391
Name=Funky Bass
Len=4001
[Preset2]
Data=78367571EE5E
Data_1=3483290482
Data_2=299230-293
Data_3=2390920391
Name=Mono Lead
Len=3994

Как бы я сделал это с Bash?

1 ответ1

1

Я не знаю, как сортировать и увеличивать с помощью sed , поэтому это решение смешивает sed , bash и sort .

sed -r ':a;N;s/\n/|/;/Len=/{s/(.*Name=)(.*)(Len=.*)/\2\1\3/p;d};ba' presets-file |
sort |
while read line; do
    sed -r 's/(.*\|)(\[Preset)[0-9]+(\].*)(Len=.*)/\2'$((i++))'\3\1\4/;s/\|/\n/g' <<<"$line"
done

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .