我有一个使用数组作业的管道,需要更改某些步骤的输入数量。我考虑进行测试,uniq
因为我的文件夹中唯一改变的部分是最后四个字符(示例中的hap部分)。因此,我的所有路径看起来都像这样:
/mnt/nvme/user/something1/hap1
/mnt/nvme/user/something1/hap2
/mnt/nvme/user/something2/hap1
/mnt/nvme/user/something2/hap2
我正在做的事情如下:
DIR=( "/mnt/nvme/ungaro/something1/hap1" "/mnt/nvme/ungaro/something1/hap2" "/mnt/nvme/ungaro/something2/hap1" "/mnt/nvme/ungaro/something2/hap2" )
for dir in "${DIR[@]}"; do echo $dir | sed 's#/hap[0-9]##' | uniq; done
但是,在删除每个元素的hap部分后,结果输出始终会显示变量中的所有元素,而不会折叠重复的行。
我可能遗漏了什么,可能是强制for
打印所有行。如果是这样,有没有办法在一行命令中达到所需的结果?
uniq
使用 shell 循环内的管道,每行都会被单独评估(并且每行显然都是独一无二的)。您可以使用或(将多个 sed 调用减少为一个)
或(消除显式循环)
或(使用变量扩展修饰符代替外部
sed
命令)11. 在 zsh 中,你可以更进一步直接打印唯一的头部:
print -r -C1 ${(u)DIR:h}
我会做什么:
或者
$NF
/
是您尝试用 分隔的最新列,用于删除sed
。产量: