Replace sed将行的第一部分复制到同一行的多个位置

Replace sed将行的第一部分复制到同一行的多个位置,replace,sed,Replace,Sed,我有一种感觉,我想做的事情很简单,但我的大脑并没有想出正确的方法来操纵它工作。有一个文件有几千行,每行都有一个开始部分(日期和时间戳),然后是一组或多组值(包括MAC地址、IP地址和用户名)。我希望使用sed来获取第一部分,并将其复制到自己行中每组值的开头。以下是一个例子: 源文件的内容: 2013-08-02 11:33:32 (00:11:22:33:44:55, 10.8.12.13, ajones) (12:23:34:45:56:67, 10.8.23.34, msmith) (23:

我有一种感觉,我想做的事情很简单,但我的大脑并没有想出正确的方法来操纵它工作。有一个文件有几千行,每行都有一个开始部分(日期和时间戳),然后是一组或多组值(包括MAC地址、IP地址和用户名)。我希望使用sed来获取第一部分,并将其复制到自己行中每组值的开头。以下是一个例子:

源文件的内容:

2013-08-02 11:33:32 (00:11:22:33:44:55, 10.8.12.13, ajones) (12:23:34:45:56:67, 10.8.23.34, msmith) (23:34:45:56:67:78, 10.8.44.33, hjohnson)
2014-09-22 14:43:02 (33:44:55:66:77:88, 10.8.98.99, brodriguez)
2015-10-31 04:43:39 (a2:4b:77:3c:32:91, 10.8.100.55, sthomas) (05:71:38:65:c4:7a, 10.8.81.43, ymcalister)
将成为:

2013-08-02 11:33:32 (00:11:22:33:44:55, 10.8.12.13, ajones)
2013-08-02 11:33:32 (12:23:34:45:56:67, 10.8.23.34, msmith)
2013-08-02 11:33:32 (23:34:45:56:67:78, 10.8.44.33, hjohnson)
2014-09-22 14:43:02 (33:44:55:66:77:88, 10.8.98.99, brodriguez)
2015-10-31 04:43:39 (a2:4b:77:3c:32:91, 10.8.100.55, sthomas)
2015-10-31 04:43:39 (05:71:38:65:c4:7a, 10.8.81.43, ymcalister)

我一直在和保留空间一起处理全局替换,但是我找不到一种方法来将保留内容作为替换参数,这将使这变得更容易。再说一次,我确信有些基本的事情我没有做,但就我的一生而言,我无法理解。谢谢你能给我的帮助

不确定如何使用
sed
执行此操作,但使用
awk
可以执行此操作:

awk -F\( '{for (i=2;i<=NF;i++) print $1 FS $i}' file
2013-08-02 11:33:32 (00:11:22:33:44:55, 10.8.12.13, ajones)
2013-08-02 11:33:32 (12:23:34:45:56:67, 10.8.23.34, msmith)
2013-08-02 11:33:32 (23:34:45:56:67:78, 10.8.44.33, hjohnson)
2014-09-22 14:43:02 (33:44:55:66:77:88, 10.8.98.99, brodriguez)
2015-10-31 04:43:39 (a2:4b:77:3c:32:91, 10.8.100.55, sthomas)
2015-10-31 04:43:39 (05:71:38:65:c4:7a, 10.8.81.43, ymcalister)

awk-F\({for(i=2;i使用
D
命令设置递归循环。我们基本上将日期存储在保留空间中,并在打印信息之前将其打印出来。如果一行上有多条信息,则在信息末尾插入一条换行符,打印出来,并用D
也会重新启动循环

/[[:date:]]/ { x; d; g; s/\([[:date:]]\) .*/\1/; x; s/[[:date:]] \(.*\)/\1/ }
x; p; x
s/[[:info:]]/&\n/
P
D
其中,
[[:date:][]
[[:info:][]
分别是日期和信息的正则表达式。

这可能适用于您(GNU-sed):


@我不明白为什么?
sed -r 's/^(\S+ \S+) \([^)]*\)/&\n\1/;/\(/P;D' file