bash:如何从字符串的开头提取文本到第一个数字?

时间:2013-12-18 13:26:33

标签: regex bash filenames

我有一堆像这样命名的文件:

text 01 (blabla) other text
text 02 (whatever) other text
.
.
text 025 (etc) other tex

some text 1 (20031020) other text
some text 2 (20031022) other text
.
.
some text 10 (20031025) other text

some new text 01 other text
.
.
.
some new text 200 other text

我想从文件名中只提取第一个数字之前的单词,所以从上面的例子我想得到:

text
some text
some new text

我想这样做是为了根据文件名移动所属文件夹中的每个文件(如果不存在,则创建文件夹)。

我想用bash做这个,我知道可以使用正则表达式来完成但是我不知道怎么做,我只看到了字段由已知字符分隔的示例,而在这种情况下,限制是一个空格后跟任意数字。

2 个答案:

答案 0 :(得分:3)

使用${variable%%pattern}(此删除后缀模式)。

$ filename='text 01 (blabla) other text'
$ echo ${filename%%[0-9]*}
text

答案 1 :(得分:-1)

您可以使用sed:

printf "%s\n" *[[:space:]][0-9]* | sed 's/^\([^0-9]*\) [0-9].*$/\1/'