У меня есть текстовый файл в таком формате

[PC] AeternoBlade II: Director
https://yyyy.cc/CD1.html

Link;AA.part1.rar;BB;
Link;AA.part2.rev;CC;

https://yyyy.com/wqAk848v

Link;BB.part1.rar;BB;
Link;BB.part2.rev;CC;

[PC] Halflife
https://yyyy.com/wqAk848v

Link;XX.part5.rar;VV;
Link;XX.part6.rev;DD;
......

Я пытаюсь форматировать текст таким образом

[PC] AeternoBlade II: Director
https://yyyy.cc/CD1.html

[PC] AeternoBlade II: Director;Link;AA.part1.rar;BB;
[PC] AeternoBlade II: Director;Link;AA.part2.rev;CC;

https://yyyy.com/wqAk848v

[PC] AeternoBlade II: Director;Link;BB.part1.rar;BB;
[PC] AeternoBlade II: Director;Link;BB.part2.rev;CC;

[PC] Halflife
https://yyyy.com/wqAk848v

[PC] Halflife;Link;XX.part5.rar;VV;
[PC] Halflife;Link;XX.part6.rev;DD;

У меня есть имя файла, которое всегда начинается с [PC], но со стандартным префиксом, за которым следуют ссылки ниже.
Я пытаюсь добавить [PREFIX] - name перед Link;

Может ли кто-нибудь направить меня на правильный путь к достижению этого?

0
Jack Rock 3 Фев 2021 в 11:46

2 ответа

Лучший ответ

Это может сработать для вас (GNU sed):

sed -E '/^\[PC\]/h;/^Link/{G;s/(.*)\n(.*)/\2;\1/}' file

Сделайте копию самой последней строки, начинающейся [PC].

Если строка начинается со слова «Link», добавьте скопированную строку и, используя сопоставление с образцом, преобразуйте ее в желаемый формат.

1
potong 3 Фев 2021 в 11:15

Используя awk:

awk '/^\[PC\]/ { head=$0 } /^Link/ { $0=head";"$0 }1' file

Найдите строки, начинающиеся с «[PC]», и установите переменную head на строку ($ 0). Затем, когда строка начинается с "Link", установите строку ($ 0) в заголовок переменной, a ";" а затем линия. Распечатать все результаты с 1

1
Raman Sailopal 3 Фев 2021 в 09:21
66023998