如何在@ string之后剪切一行并添加反斜杠

时间:2014-08-19 13:02:42

标签: linux

我想在排除@ string之后剪切并在行尾添加/斜杠而不触及行不包含@符号。

在文件中搜索并查找;

path = /aaa/bbb/ccc.com/user/dddd/user@yahoo.com/
path = /aaa/bbb/ccc.com/user/dddd/user@yahoo.co.uk/
path = /aaa/bbb/ccc.com/user/dddd/user2@yahoo.com/
path = /aaa/bbb/ccc.com/user/dddd/user@hotmail.co.uk/
path = /aaa/bbb/ccc.com/user/dddd/user@abc.xxx.co.uk/
path = /aaa/bbb/ccc.com/user/dddd/user5/

我想转换的内容;

path = /aaa/bbb/ccc.com/user/dddd/user@yahoo/
path = /aaa/bbb/ccc.com/user/dddd/user@yahoo2/
path = /aaa/bbb/ccc.com/user/dddd/user2@yahoo/
path = /aaa/bbb/ccc.com/user/dddd/user@hotmail/
path = /aaa/bbb/ccc.com/user/dddd/user@abc/
path = /aaa/bbb/ccc.com/user/dddd/user5/

2 个答案:

答案 0 :(得分:1)

sed -r 's/@([^\.\/]+)(.*)/@\1\//' < file
path = /aaa/bbb/ccc.com/user/dddd/user@yahoo/
path = /aaa/bbb/ccc.com/user/dddd/user@yahoo/
path = /aaa/bbb/ccc.com/user/dddd/user2@yahoo/
path = /aaa/bbb/ccc.com/user/dddd/user@hotmail/
path = /aaa/bbb/ccc.com/user/dddd/user@abc/
path = /aaa/bbb/ccc.com/user/dddd/user5/

如果你想更复杂的处理(雅虎与雅虎2),你将不得不使用一些编程语言,恕我直言

答案 1 :(得分:1)

sed '/@/ s|\(@[^.]*\).*$|\1/|' YourFile

从结尾开始而不是@(posix版本)

解释

  • /@/仅处理内有@的行(其他行保持原样)。
  • 使用sed(替代)的s动作。由于模式中的char /,我在这里使用了另一个分隔符|
  • \(@[^.]*\)表示从@开始的第一组char,直到第一个点(实际上所有后续附加的char我都可以,但不是一个点)。如果没有点,则会占用该行的以下所有内容。
  • .*$表示先例模式(我们的组)之后的任何字符,直到结束$
  • 此内容已被群组1的内容所取代(此处只有一个群组)\1后跟/