awk中的多个字段分隔符(字段分隔符在一起)

时间:2014-08-21 07:02:58

标签: shell awk sed grep sh

我有一个文本文件

abc-AB9-3.2-def  
abc-5.6-def

我需要获得之前的字符串" - "符号后跟"任何数字"。
即。我需要在第一种情况下获得-3之前的字符串,在第二种情况下获得-5。

预期输出为:

abc-AB9
abc

请帮忙。我的分隔符是" - "其次是任何数字。

4 个答案:

答案 0 :(得分:4)

您可以尝试此awk

awk -F"-[0-9]+" '{print $1}'  yourfile

(OR)

awk 'BEGIN{ FS="-[0-9]+" } {print $1}' yourfile

另一种方式(如 Jotne 评论):

awk -F"-[0-9]" '{$0=$1}1' yourfile

答案 1 :(得分:2)

使用sed删除不相关的部分:

sed 's/-[0-9].*//' input

答案 2 :(得分:1)

通过sed,

$ sed 's/^\(.*\)-[0-9].*/\1/g' file
abc-AB9
abc

通过grep,

$ grep -oP '.*(?=-\d)' file
abc-AB9
abc

答案 3 :(得分:0)

perl -lne 'print $1 if(/(.*?)-\d.*/)' your_file

测试:

> cat temp
abc-AB9-3.2-def  
abc-5.6-def
> perl -lne 'print $1 if(/(.*?)-\d.*/)' temp
abc-AB9
abc
>