【问题标题】:In UNIX Terminal How to get a part of filename in a folder?在 UNIX 终端中如何获取文件夹中文件名的一部分?
【发布时间】:2014-02-13 17:12:03
【问题描述】:

我有一个文件夹中的 n 个文件的列表,这些文件具有某种格式。

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

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

【问题讨论】:

    标签: unix filenames


    【解决方案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}'
    

    【讨论】:

      【解决方案2】:
      awk -F"."'{print $2}' filename
      

      您可以尝试打印$1, $2,$3... 以加深对命令的理解。

      【讨论】:

        【解决方案3】:

        您可以在 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
        

        【讨论】:

          猜你喜欢
          • 2012-01-11
          • 1970-01-01
          • 2014-10-20
          • 1970-01-01
          • 2014-07-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-12-26
          相关资源
          最近更新 更多