如何在 bash 中解析文件名?
我有一个格式如下的文件名:
系统源-yyyymmdd.dat
我希望能够使用“-”作为分隔符来解析文件名的不同位。
I have a filename in a format like:
system-source-yyyymmdd.dat
I'd like to be able to parse out the different bits of the filename using the "-" as a delimiter.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
最简单(也是 IMO 最好的方法)就是使用
read
:该主题有很多变体,其中许多都依赖于 shell:
bash$ IFS=-。 读取系统源日期 ext <<< foo-bar-yyyymmdd.dat
The simplest (and IMO best way) to do this is simply to use
read
:There are many variations on that theme, many of which are shell dependent:
bash$ IFS=-. read system source date ext <<< foo-bar-yyyymmdd.dat
使用
剪切
命令。例如
将提取第一位。
更改
-f
参数的值以获得适当的部分。以下是有关 Cut 命令的指南。
Use the
cut
command.e.g.
will extract the first bit.
Change the value of the
-f
parameter to get the appropriate parts.Here's a guide on the Cut command.
另一种方法是使用shell的内部解析工具,这样可以避免创建子进程的成本:
Another method is to use the shell's internal parsing tools, which avoids the cost of creating child processes:
根据您的需要,awk 比 cut 更灵活。 第一个预告片:
问题在于,将 awk 描述为“更灵活”肯定就像称 iPhone 为增强型手机一样;-)
Depending on your needs, awk is more flexible than cut. A first teaser:
Problem is that describing awk as 'more flexible' is certainly like calling the iPhone an enhanced cell phone ;-)
您可以使用 cut 命令 来获取 3 个“字段”中的每一个,例如:
“-d”指定分隔符,“-f”指定你需要的字段号
You can use the cut command to get at each of the 3 'fields', e.g.:
"-d" specifies the delimiter, "-f" specifies the number of the field you require
一个漂亮而优雅的(在我看来:-)仅使用内置函数是将其放入数组中
然后,您可以在数组中找到部分...
警告:如果文件名包含“奇怪”字符,这将不起作用比如空格,或者,天堂不允许,引号,反引号......
A nice and elegant (in my mind :-) using only built-ins is to put it into an array
Then, you can find the parts in the array...
Caveat: this will not work if the filename contains "strange" characters such as space, or, heaven forbids, quotes, backquotes...