有没有办法比较 sed 的保留空间与模式空间的(部分)?例如,我有以下几行
name1 id1 12-04-2016
name1 id2 12-03-2016
name2 id3 12-04-2016
name2 id4 12-03-2016
我的最终目标是删除名称重复的第一行。所以我的想法是
1)比较名称字段和保存空间。
2)如果匹配,则删除模式空间中的行
3)如果没有,则复制行以保留空间。
但是,我找不到任何详细说明如何比较模式空间中的内容与保留空间中的内容(仅找到如何复制的内容)。这不可能吗?
答案1
这是可能的。您可以将保留空间的内容附加到模式空间,并使用反向引用来检查是否相等:
sed -n '{G;s/\([^ ]+\)\(.*\)\n\1//;tl;s/\n//p;:l;n}' names