我们如何解析bash中的文件名?
时间:2020-03-05 18:49:15 来源:igfitidea点击:
我的文件名格式如下:
system-source-yyyymmdd.dat
我希望能够使用"-"作为分隔符来解析文件名的不同位。
解决方案
回答
使用cut
命令。
例如
echo "system-source-yyyymmdd.dat" | cut -f1 -d'-'
将提取第一位。
更改-f
参数的值以获取适当的部分。
这是有关"剪切"命令的指南。
回答
我们可以使用cut命令获取3个``字段''中的每个字段,例如:
$ echo "system-source-yyyymmdd.dat" | cut -d'-' -f2 source
" -d"指定分隔符,"-f"指定所需字段的编号
回答
根据需求,awk比cut更灵活。第一个预告片:
# echo "system-source-yyyymmdd.dat" \ |awk -F- '{printf "System: %s\nSource: %s\nYear: %s\nMonth: %s\nDay: %s\n", ,,substr(,1,4),substr(,5,2),substr(,7,2)}' System: system Source: source Year: yyyy Month: mm Day: dd
问题在于,将awk描述为"更灵活"肯定像是将iPhone称为增强型手机;-)
回答
另一种方法是使用外壳程序的内部解析工具,这避免了创建子进程的开销:
oIFS=$IFS IFS=- file="system-source-yyyymmdd.dat" set $file IFS=$oIFS echo "Source is "
回答
仅内置的一种不错且优雅的方法(在我看来:-)是将其放入数组中
var='system-source-yyyymmdd.dat' parts=(${var//-/ })
然后,我们可以在阵列中找到零件。
echo ${parts[0]} ==> system echo ${parts[1]} ==> source echo ${parts[2]} ==> yyyymmdd.dat
警告:如果文件名包含空格等"奇怪"字符,或者天堂禁止使用引号,反引号,则此操作将无效。