Regex 拆下Vim中具有重复模式的管路
我有一个分号分隔的文本文件,表示一个数据表。我想删除“columns”2和4相同的所有行 来源示例:Regex 拆下Vim中具有重复模式的管路,regex,vim,Regex,Vim,我有一个分号分隔的文本文件,表示一个数据表。我想删除“columns”2和4相同的所有行 来源示例: A;B;C;D;E;F;G 有的,;傅;文本;福;;;; 这,;线路;应;保持;;;; ;酒吧;;酒吧;;;;; 应该导致 A;B;C;D;E;F;G 这,;线路;应;保持;;;; 因为“列”2和4(“B”和“D”)的值在第一行(“Foo”)和最后一行(“Bar”)中相等,但在中间一行(“行”和“剩余”)中不相等 每个“单元格”可以包含任意数量的任意字符,分号除外 我确信g[lobal]命令
A;B;C;D;E;F;G
有的,;傅;文本;福;;;;
这,;线路;应;保持;;;;
;酒吧;;酒吧;;;;;
应该导致
A;B;C;D;E;F;G
这,;线路;应;保持;;;;
因为“列”2和4(“B”和“D”)的值在第一行(“Foo”)和最后一行(“Bar”)中相等,但在中间一行(“行”和“剩余”)中不相等
每个“单元格”可以包含任意数量的任意字符,分号除外
我确信g[lobal]
命令可以做到这一点,但我无法找到与这些行匹配的正确模式。用于“第2列和第4列相同”的Vim正则表达式是这样的
您应该能够将其与:g
一起使用
^ # start of line
[^;]* # anything but a semi-colon (column 1)
; # delimiter
\( # start group 1
[^;]\+ # anything but a semi-colon, at least 1 character (column 2)
\) # end group 1
; # delimiter
[^;]* # anything but a semi-colon (column 3)
; # delimiter
\1 # same as group 1 (column 4)
; # delimiter (to prevent partial matches)
勾选这个:
awk -F';' '$2 != $4 {print $0}' your_file
结果:
awk -F';' '$2 != $4 {print $0}' your_file
A;B;C;D;E;F;G
This;line;shall;remain;;;;