在UNIX终端如何获取文件夹中的文件名的一部分?

时间:2014-02-13 17:12:03

标签: unix filenames

我有一个文件夹中的n个文件列表有一些格式。

例如:ABCD.EXXXX.ZZZZ.ZZZZZ.txt

在上面的文件中ABCD.E对于所有文件都是通用的,ZZZZ.ZZZZ是用户希望字符串,我需要从所有文件中提取XXXX,需要向用户显示不同的XXXX ..有没有办法这样做。?帮助我这样做..提前致谢..

3 个答案:

答案 0 :(得分:1)

使用ls -1制作相关文件的列表。将其导入sed以剥离开头'ABCD.E'。然后将它再次输入sed以删除第一个'。'之后的所有内容。

ls -1 ABCD\.E*\.txt | sed 's/^ABCD\.E//' | sed 's/\..*//'

或者,如果你想要更多地控制输出,你可以用awk

做第二位
ls -1 ABCD\.E*\.txt | sed 's/^ABCD\.E//' | awk 'BEGIN{FS="."}{print "value =", $1, "user=", $2"."$3}'

答案 1 :(得分:0)

awk -F"."'{print $2}' filename

您可以尝试打印$1$2$3 ...以更好地了解命令。

答案 2 :(得分:0)

您可以在shell中使用bash / ksh参数替换#%

function get_filename_section {
    typeset f=${1:?}
    typeset r=${f#ABCD.E}
    print ${r%.ZZZZ.ZZZZZ.txt}
}

测试:

[[ $( get_filename_section ABCD.EXXXX.ZZZZ.ZZZZZ.txt ) == XXXX ]] &&
    echo ok || echo no