Bash sed 替换文本文件中的所有内容,直到出现第一个字母字符
Bash sed replace everything in a textfile until the apperance of the first alphabetic character
有人可以帮我解决这个问题吗?我有一堆 text-files,我想更改。它们都以其他字符开头,而不是普通的字母字符。我现在想删除字母字符出现之前的所有内容,以便它们以标题开头,并保持其他所有内容完整无缺。
这里有一个例子:
=================================================================================
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
它不起作用
我对此还很陌生,所以请多多包涵。
最佳史蒂夫
使用sed
$ sed 'N;N;s/\("\).*\n\([[:alpha:]]\+\)//' 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:]]\)//;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/// 命令删除所有前导 non-alpha 个字符。
有人可以帮我解决这个问题吗?我有一堆 text-files,我想更改。它们都以其他字符开头,而不是普通的字母字符。我现在想删除字母字符出现之前的所有内容,以便它们以标题开头,并保持其他所有内容完整无缺。
这里有一个例子:
=================================================================================
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
它不起作用
我对此还很陌生,所以请多多包涵。
最佳史蒂夫
使用sed
$ sed 'N;N;s/\("\).*\n\([[:alpha:]]\+\)//' 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:]]\)//;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/// 命令删除所有前导 non-alpha 个字符。