【问题标题】:Split a namefile in shell在shell中拆分名称文件
【发布时间】:2013-09-09 23:22:44
【问题描述】:

我来这里是为了了解如何拆分由 ls 命令找到的文件名 :D。让我解释得更好...

我有一个变量

images=$( ls | grep .img )

然后我想拆分搜索结果,因为我只想要 .img 之前的名称,所以一个好主意是使用 IFS。

IFS=. read -r disk <<< $image

非常好,但是当使用 $disk 变量进行回显时,我看到的是一个“.img”,我想恢复那个点之前的位置。

谢谢大家,如有错误请见谅:)

【问题讨论】:

  • 建议:添加标签指定which shell。从讨论来看,它绝大多数可能是 bash,但最好是明确的。即使您已经接受了答案,它也会帮助未来遇到类似问题的寻求者找到答案。

标签: bash shell split ifs


【解决方案1】:

使用流编辑器 sed!示例:

echo "myImage.jpg" | sed 's/.jpg//'

s 表示“替换”,您将前两个斜杠之间的部分替换为第二个和第三个斜杠之间的部分,因此在示例中,“.jpg”代表空字符串。

就是这样!

【讨论】:

  • 谢谢,我不能投票给正确的答案,但你是对的!
【解决方案2】:

由于您提到使用<<<,我假设您使用的是支持数组的shell(特别是bash。其他shell--尤其是zsh--可能会使用不同的语法来处理我即将要做的事情描述)。

images=( *.img )  # No need to parse ls, which is generally a bad idea

假设只有一个匹配文件,则可以使用

disk=${images%.img}

从文件名中去除.img 并将剩余部分保存在disk 中。如果可能有多个匹配项,您可以将扩展剥离应用于数组的每个元素并将结果存储在第二个数组中。

disks=( "${images[@]%.img}" )

【讨论】:

  • 好吧,我不能全部理解,但它有很大帮助,我的目的只是拆分文件的名称,因为我在备份中使用它!谢谢:D
【解决方案3】:

basename 是你想要的。
从手册页:

basename - strip directory and suffix from filenames  

    EXAMPLES
           basename /usr/bin/sort
                  Output "sort".
           basename include/stdio.h .h
                  Output "stdio".

【讨论】:

    猜你喜欢
    • 2012-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-22
    • 2016-07-16
    • 2017-01-27
    • 1970-01-01
    相关资源
    最近更新 更多