Awk / Perl正则表达式用空格和连字符匹配

时间:2016-09-22 11:54:00

标签: regex perl awk

我在sample.txt

中有以下两行
Column1                                         | Column2
AIA                                               1000
AIA Integrations for E-Business Suite             5544

现在我想看到以下输出:

awk -F "-" sample.txt

我试过了:

t = 'p', 'q', 'r', 's', 't'

它过滤连字符" - "靠近"电子商务套房" 如何使它过滤最后一个连字符而不是中间连字符。

3 个答案:

答案 0 :(得分:4)

您可以使用:

awk -F ' - ' -v OFS=';' 'BEGIN{print "Column1", "Column2"} {print $1, $2}' file |
column -s ';' -t

Column1                                Column2
AIA                                    1000
AIA Integrations for E-Business Suite  5544
  • -F ' - '使用" - "是输入字段分隔符
  • -v OFS=';'使用;作为输出字段分隔符
  • column -s ';' -t使用;作为分隔符
  • 以表格格式格式化数据

答案 1 :(得分:0)

我会使用perl来保证我们真正捕获最后一个-作为分隔符而不是第一个字段中间的其他实例:

perl -wnle '/^(.+) - (.+)$/ or die; print "$1\t$2"' sample.txt

如果您希望输出位于固定宽度列中,则可以使用column

perl -wnle '/^(.+) - (.+)$/ or die; print "$1\t$2"' sample.txt | column -s $'\t' -t

说明:正则表达式中的第一个(.+)将捕获第一个组。因为+是贪婪的,^(.+) -它与最大可能的子字符串匹配,所以如果有-的多个实例,它将包括所有这些实例,但是第一次捕获中的最后一个组。然后,最后一个(.+)将捕获第二个捕获组中的所有剩余字符。

答案 2 :(得分:0)

另一个例子,使用split和join:

perl -F- -e 'print join "\t", reverse pop @F, join "-", @F' sample.txt