gpt4 book ai didi

bash - 如何从 Shell 中的路径列表中删除文件名

转载 作者:行者123 更新时间:2023-12-05 01:02:14 25 4
gpt4 key购买 nike

我只想从以下配置文件中删除一个文件名。

配置文件 -- test.conf

knowledgebase/arun/test.rf
knowledgebase/arunraj/tester/test.drl
knowledgebase/arunraj2/arun/test/tester.drl

上面的文件应该被读取。删除的内容应该转到另一个名为 output.txt

的文件

以下是我的尝试。这对我根本不起作用。我只得到空文件。

#!/bin/bash
file=test.conf
while IFS= read -r line
do
# grep --exclude=*.drl line
# awk 'BEGIN {getline line ; gsub("*.drl","", line) ; print line}'
# awk '{ gsub("/",".drl",$NF); print line }' arun.conf
# awk 'NF{NF--};1' line arun.conf
echo $line | rev | cut -d'/' -f 1 | rev >> output.txt
done < "$file"

预期输出:

knowledgebase/arun
knowledgebase/arunraj/tester
knowledgebase/arunraj2/arun/test

最佳答案

这里有 dirname命令使其变得简单可靠:

#!/bin/bash
file=test.conf
while IFS= read -r line
do
dirname "$line"
done < "$file" > output.txt

有 Bash shell parameter expansions这对给定的名称列表可以正常工作,但对于某些名称不能可靠地工作:

file=test.conf
while IFS= read -r line
do
echo "${line%/*}"
done < "$file" > output.txt

sed 来完成这项工作——使用给定的名称集很容易:

sed 's%/[^/]*$%%' test.conf > output.txt

如果您必须处理像 /plain.file (或 plain.file —— 与 shell 扩展相同的边缘情况)这样的名称,那就更难了.

您可以将 Perl、Python、Awk 变体添加到工作方式列表中。

关于bash - 如何从 Shell 中的路径列表中删除文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35193476/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com