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

包名称重复。我只需要从每行的第二个 abc 开始的后半部分,然后将其输出到文件中。

我试图阅读 awk 和 sed,但是,对于我尝试学习这些东西的第一天来说,这似乎有点先进。提前致谢。

4

4 回答 4

1

您可以使用以下 sed 命令:

sed -E 's#^.*(abc/.*)$#\1#g' file
于 2012-08-30T16:25:47.720 回答
0

使用 sed 删除前 4 个级别:

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

或使用重复模式:

sed 's!^\([^/]*/\)\{4\}!/!' input_file
于 2012-08-30T16:24:55.540 回答
0

这将做:

sed -E 's,^.+(abc/),\1,'input_file
于 2012-08-30T16:55:28.440 回答
0

有很多方法可以做到这一点。如果要保留的文本始终从同一列位置 (21) 开始,请使用:

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

如果它始终是您想要的“abc ...”的最后一次出现,请尝试:

awk '{print FS $NF}' FS=abc input-file > output-file
于 2012-08-30T17:18:45.403 回答