2012-08-30 30 views
2

我是linux新手,很難實現以下功能。我在每行中都有一個包名稱的文件。最後一次出現在一行中的字符串

例如:

abc/123/new/package/abc/123/new/package 
abc/124/new/package/abc/123/new/package 
abc/125/new/package/abc/123/new/package 
abc/126/new/package/abc/123/new/package 

的包名稱重複。我只需要從第二行開始,然後將其輸出到文件中。

我試圖讀懂awk和sed,但是,這似乎有點高級爲我的第一天試圖學習這個東西。提前致謝。

+1

請提供以上所需腳本的預期輸出。 – anubhava

回答

0

使用SED刪除第4級:

sed 's!^[^/]*/[^/]*/[^/]*/[^/]*!!' input_file 

或使用重複模式:

sed 's!^\([^/]*/\)\{4\}!/!' input_file 
1

您可以使用下面的sed命令:

sed -E 's#^.*(abc/.*)$#\1#g' file 
+0

我注意到這適用於Linux,它會在unix系統中有所不同,因爲我創建的應用程序將在兩個系統上實現,現在我正在閱讀unix可能使用nawk vs awk:S? – user1636579

+0

我已經在Linux和Mac上嘗試了這一點,它已經工作了,所以我相信它可以在任何Unix系統上工作。 – anubhava

0

這樣做:

sed -E 's,^.+(abc/),\1,'input_file 
+0

這與@ anubhava在26分鐘前的回答基本相同。這個答案中有新東西嗎? –

0

有很多方法可以做到這一點。如果你想始終保持文本在同一列的位置開始(21),用途:

cut -b 21- < input-file > output-file 

如果它總是最後出現的「ABC ......」你想,嘗試:

awk '{print FS $NF}' FS=abc input-file > output-file 
+0

非常感謝,這是我的第一篇文章...我將閱讀awk,如果我有任何重大問題,我將搜索此論壇...再次感謝!這個網站非常有用的資源! – user1636579

相關問題