2017-04-08 209 views
0

我有一個包含文件的多個完整路徑刪除存儲在一個文件中FULLPATH的路徑前綴

/home/pi/1.txt 
/home/pi/2.txt 
/home/pi/3.txt 

,我想每一個文件的基本名稱

1.txt 
2.txt 
3.txt 

我只知道我可以得到每一行和使用命令

basename 

是否有可能實現我的目標更簡單?謝謝。

+0

是將它與簡單的SED/AWK ......是最終目標,或者你需要得到基本名稱後做什麼? – Sundeep

回答

1

@try:

awk -F"/" '{print $NF}' Input_file 

製作 「/」 作爲字段分隔符和打印每一行的最後一個字段。

+0

完美!正是我在找什麼!謝謝。 – berlloon

+0

如果您認爲如果幫助了您,您可以選擇正確的答案。 – RavinderSingh13

2

我想出了最簡單的方法是這樣的:

basename -a $(<foo.txt) 

哪些工作,因爲該進程替換$()是文件的重定向輸出,然後將其拆分成,因爲字分裂的多個參數。基本名稱帶有多個參數-a

請注意,如果文件中的路徑名中存在空格(由於所述分詞),這不起作用。

+0

謝謝您的回覆,但是當我嘗試了您的命令時,它輸出了無效選項 - 'a' – berlloon

+0

'-a'開關已添加到gnu coreutils版本8.16(2012-03-26)https:// git。 savannah.gnu.org/gitweb/?p=coreutils.git;a=blob_plain;f=NEWS;hb=HEAD –

+0

好的,非常感謝您的評論,我的問題已經解決。 – berlloon

1

僅使用殼工具A液:

readarray -t arr <file.txt 
echo "${arr[@]##*/}" 

這假設每個文件是一條線(即使有空格)。帶有換行符的文件名將失敗,因爲文件中需要一些其他結構。

+0

非常感謝你,這個命令部分解決了我的問題。文件名與空格分開,我的問題可以通過用新行替換空格來完全解決。命令是「sed's/\ s \ +/\ n/g'tmp2」 – berlloon

2

另在AWK:

$ awk 'sub(/.*\//,"")||1' file 
1.txt 
2.txt 
3.txt 
+0

這工作,謝謝 – berlloon