1

我在这里知道如何拆分由 ls 命令找到的文件名:D。让我解释得更好...

我有一个变量

images=$( ls | grep .img )

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

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

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

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

4

3 回答 3

1

使用流编辑器 sed!例子:

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

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

就这样!

于 2013-09-09T23:34:16.283 回答
1

由于您提到 using <<<,我假设您正在使用一个支持数组的 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}" )
于 2013-09-09T23:36:40.963 回答
1

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

basename - strip directory and suffix from filenames  

    EXAMPLES
           basename /usr/bin/sort
                  Output "sort".
           basename include/stdio.h .h
                  Output "stdio".
于 2013-09-09T23:40:54.533 回答