【发布时间】:2010-04-20 09:26:22
【问题描述】:
使用 linux bash shell,我如何使用正则表达式来获取文件的某个字符串
举例:
对于文件名 *.tgz 做
“获取文件名的特定字符串(在我的情况下,获取文件2010.01.12myfile.tgz的2010.04.12)”
完成
或者我应该转向 perl
谢谢
坦率
【问题讨论】:
-
获取 2010.01.12 还是 2010.04.12 ?
使用 linux bash shell,我如何使用正则表达式来获取文件的某个字符串
举例:
对于文件名 *.tgz 做
“获取文件名的特定字符串(在我的情况下,获取文件2010.01.12myfile.tgz的2010.04.12)”
完成
或者我应该转向 perl
谢谢
坦率
【问题讨论】:
FILE=2010.01.12myfile.tgz
echo ${FILE:0:10}
给予
2010.01.12
【讨论】:
使用 bash,对于最简单的情况,如果您知道要获取的是日期戳,则可以使用 shell 扩展
#!/bin/bash
for file in 20[0-9][0-9].[01][0-9].[0-9][0-9]*tgz
do
echo $file
done
否则,如果它在第一个字母之前,
for file in *tgz
do
echo ${file%%[a-zA-Z]*}
done
否则,您应该说明您的搜索条件。
【讨论】:
#!/bin/sh
a="2010.04.18Myfile.tgz"
echo ${a%%+([a-zA-Z.])}
bash' 正则表达式非常强大(至少与标准的 sh 或 command.com 相比 :-))
【讨论】:
#!/bin/bash 并拥有 shopt extglob 才能使用 +(...)。