'grep'一个文件名,但只显示

'grep' a file name, but only show

我有名为 ACC160-MASTER-201503、ACC160L-MASTER-201503 和 IS160-MASTER-201503 的文件。我基本上是在尝试输出前几个字母(在示例中,只是 ACC 和 IS)而不是数字。之后我需要另一个 grep 来只抓取 -(在示例中,ACC160、ACC160L 和 IS160)。

如果您想获取第一个 '-' 之前的所有文件名,那么 grep -oP ".*?(?=-)" 应该可以做到。

  • -o 是唯一匹配的选项
  • -P 启用 Perl 语法
  • .*?是一个勉强的量词,它在正则表达式
  • 中寻找下一个主题时读取
  • (?=-) 是一个前瞻性标签:它告诉您在匹配的子字符串
  • 之后会发生什么 (-)

如果这是 bash/ksh/zsh/sh/...,只需使用 parameter substitution:

for file in ACC160-MASTER-201503 ACC160L-MASTER-201503 IS160-MASTER-201503; do
    alnum=${file%%-*}          # remove the first "-" and following chars
    alpha=${alnum%%[0-9]*}     # remove the first digit and all following chars

    echo "$file => $alnum => $alpha"
done
ACC160-MASTER-201503 => ACC160 => ACC
ACC160L-MASTER-201503 => ACC160L => ACC
IS160-MASTER-201503 => IS160 => IS