【发布时间】:2014-10-14 17:19:53
【问题描述】:
我有一个文本文件
abc-AB9-3.2-def
abc-5.6-def
我需要获取“-”符号之前后跟“任意数字”的字符串。
IE。在第一种情况下,我需要在 -3 之前获取字符串,在第二种情况下,我需要在 -5 之前获取字符串。
预期的输出是:
abc-AB9
abc
请帮忙。我的分隔符是“-”,后跟任意数字。
【问题讨论】:
我有一个文本文件
abc-AB9-3.2-def
abc-5.6-def
我需要获取“-”符号之前后跟“任意数字”的字符串。
IE。在第一种情况下,我需要在 -3 之前获取字符串,在第二种情况下,我需要在 -5 之前获取字符串。
预期的输出是:
abc-AB9
abc
请帮忙。我的分隔符是“-”,后跟任意数字。
【问题讨论】:
你可以试试这个awk,
awk -F"-[0-9]+" '{print $1}' yourfile
(或)
awk 'BEGIN{ FS="-[0-9]+" } {print $1}' yourfile
另一种方式(如 Jotne 评论):
awk -F"-[0-9]" '{$0=$1}1' yourfile
【讨论】:
awk 解决方案。如果这是RS,是的,那么你需要GNU awk
+ 符号,因为 OP 说任何数字,所以 "-[0-9]" 就足够了。您可以将其缩短为:awk -F"-[0-9]" '{$0=$1}1' file
通过 sed,
$ sed 's/^\(.*\)-[0-9].*/\1/g' file
abc-AB9
abc
通过 grep,
$ grep -oP '.*(?=-\d)' file
abc-AB9
abc
【讨论】:
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
>
【讨论】:
使用sed删除不相关的部分:
sed 's/-[0-9].*//' input
【讨论】: