'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
我有名为 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