[英]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.