2012-08-30 35 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

相关问题