簡體   English   中英

如何從Shell中的路徑列表中刪除文件名

[英]How to remove a filename from the list of path in Shell

我只想從以下配置文件中刪除文件名。

配置文件 -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參數擴展可以與給定的名稱列表一起使用,但對於某些名稱將無法可靠地運行:

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擴展plain.file的邊緣情況)之類的名稱,這將變得更加困難。

您可以將Perl,Python,Awk變體添加到完成工作的方式列表中。

使用awk one班輪,您可以執行以下操作:

awk 'BEGIN{FS=OFS="/"} {NF--} 1' test.conf

輸出:

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

您可以這樣獲得路徑:

  path=${fullpath%/*}

它在最后一個/之后切掉字符串

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM