Regex 从文件中删除数字的Sed脚本

Regex 从文件中删除数字的Sed脚本,regex,sed,Regex,Sed,我收到以下格式的数据: comp.os.linux announce 0000002587 02190 m comp.arch 00000 28874 y utsa.cs.3423 00000000004 000000000001 y 我应该处理它,使它看起来像: comp.os.linux announce m comp.arch y utsa.cs.3423 y 我尝试了s/^[0-9]//g,似乎效果不错,但最后一行缺少使用awk的4个数字,打印第一个和最后一个字段,如果第二个

我收到以下格式的数据:

comp.os.linux announce 0000002587 02190 m

comp.arch 00000 28874 y

utsa.cs.3423 00000000004 000000000001 y
我应该处理它,使它看起来像:

comp.os.linux announce m

comp.arch y

utsa.cs.3423 y

我尝试了
s/^[0-9]//g
,似乎效果不错,但最后一行缺少使用
awk
的4个数字,打印第一个和最后一个字段,如果第二个字段仅由字母字符组成,则包括:

awk '$2~/^[[:alpha:]]+$/ {print $1, $2, $NF; next} {print $1, $NF}' file.txt

如果您坚持使用
sed

sed -E 's/^([^[:blank:]]+)[[:blank:]]+([[:alpha:]]+)?.*[[:blank:]]([^[:blank:]]+)$/\1 \2 \3/'
对于不只有字母第二个字段的行,这两个字段之间将有两个空格,您可以为其添加另一个
sed

sed -E 's/^([^[:blank:]]+)[[:blank:]]+([[:alpha:]]+)?.*[[:blank:]]([^[:blank:]]+)$/\1 \2 \3/; s/  / /'
示例:

% cat file.txt                                              
comp.os.linux announce 0000002587 02190 m
comp.arch 00000 28874 y
utsa.cs.3423 00000000004 000000000001 y

% awk '$2~/^[[:alpha:]]+$/ {print $1, $2, $NF; next} {print $1, $NF}' file.txt
comp.os.linux announce m
comp.arch y
utsa.cs.3423 y

% sed -E 's/^([^[:blank:]]+)[[:blank:]]+([[:alpha:]]+)?.*[[:blank:]]([^[:blank:]]+)$/\1 \2 \3/' file.txt
comp.os.linux announce m
comp.arch  y
utsa.cs.3423  y

% sed -E 's/^([^[:blank:]]+)[[:blank:]]+([[:alpha:]]+)?.*[[:blank:]]([^[:blank:]]+)$/\1 \2 \3/; s/  / /' file.txt
comp.os.linux announce m
comp.arch y
utsa.cs.3423 y
对于sed:

sed 's/ [0-9 ]\+[0-9]\+//' file
输出:

comp.os.linux announce m comp.arch y utsa.cs.3423 y comp.os.linux.m 公司拱门y utsa.cs.3423 y
在预期输出的第2行进行了更正,最后一条记录应该是
y
,而不是
m