协助编写脚本

时间:2015-12-24 13:19:50

标签: regex svn awk

我有这个脚本:

svn log -q | awk -F '|' '/^r/ {sub("^ ", "", $2); sub(" $", "", $2); print $2" = "$2" <"$2"xyz.com"">"}' | sort -u > authors-test.txt

它从SVN repo收集作者姓名并将其更改为此格式。

himanshu.khanna = himanshu.khanna (himanshu.khanna@xyz.com)

我想在.

之后从名字和姓氏中删除(=

这就是我想要的结果:

himanshu.khanna = himanshu khanna (himanshu.khanna@xyz.com)

如果有人帮助我修改此脚本或提供可提供所需结果的不同脚本,我将非常感激。

3 个答案:

答案 0 :(得分:1)

使用Gmail.Users.Messages.remove(userId, id)sub()替换为空格。您需要将.复制到另一个变量中,因为您不想在所有使用它的地方替换它。

您还需要转义$2,因为它是正则表达式中的特殊字符。

.

答案 1 :(得分:0)

使用sed进行分组:

echo -e "himanshu.khanna = himanshu.khanna (himanshu.khanna@xyz.com)" | sed 's/\(^.*= \)\(.*\)\(\.\)\(.* \)\(.*$\)/\1\2 \4\5/g'

结果:

himanshu.khanna = himanshu khanna (himanshu.khanna@xyz.com)

比任何awk解决方案更短更清洁。

答案 2 :(得分:0)

以下内容基本上与@ AGuevara的建议相同,但(a)添加OP指定的/^r/;在某些" *"中表示强健,以及(c)显示如何避免所有反斜杠逃逸。 需要注意的是,扩展正则表达式的必需标志不是通用的:我在这里使用-E但是GNU使用-r:

sed -E -e '/^r/ s/^ *([^ ]*) *= *(.*)[.](.*)$/\1 = \2 \3/'