Bash sed заменяет все в текстовом файле до появления первого буквенного символа

Может ли кто-нибудь помочь мне с этим? У меня есть куча текстовых файлов, которые я хочу изменить. Все они начинаются с чего-то другого, кроме обычного буквенного символа. Теперь я хочу удалить все до появления буквенного символа, чтобы они начинались со своего названия, сохраняя все остальное без изменений.

вот пример:

=================================================================================

TITLE OF SONG

Text text text
Text text text

ReFrain:
Text text text

written 16.08.1998

И я хочу, чтобы это выглядело так

TITLE OF SONG

Text text text
Text text text

ReFrain:
Text text text

written 16.08.1998

Я пытался сделать это так:

for f in *.txt; do sed 's/^.*[a-zA-Z]/^.[a-zA-Z]/g'; done

Это не работает

Я довольно новичок в этом, поэтому, пожалуйста, потерпите меня.

лучший Стеф

🤔 А знаете ли вы, что...
Bash обладает механизмами для работы с временем и датой, включая форматирование и арифметику.


40
2

Ответы:

Использование sed

$ sed 'N;N;s/\("\).*\n\([[:alpha:]]\+\)/\1\2/' input_file
"TITLE OF SONG

Text text text
Text text text

ReFrain:
Text text text

written 16.08.1998"

или

$ sed ':a;N;s/\("\)[^[:alpha:]]*\n\([[:alpha:]]\)/\1\2/;ba' input_file
"TITLE OF SONG

Text text text
Text text text

ReFrain:
Text text text

written 16.08.1998"

Решено

Perl здесь удобен:

perl -0777 -i -pe 's/^[^[:alpha:]]+//s' file ...

Параметр -0777 заставляет perl записывать весь файл в переменную по умолчанию,
а команда s/// удаляет все начальные небуквенные символы.