我想在sed中删除一个模式,仅在第二次发生时删除。这是我想要的,删除一个模式,但第二次出现。sed在第二次发生时替换
是什么在FILE.CSV:
a,Name(null)abc.csv,c,d,Name(null)abc.csv,f
a,Name(null)acb.csv,c,d,Name(null)acb.csv,f
a,Name(null)cba.csv,c,d,Name(null)cba.csv,f
输出想要的东西:
a,Name(null)abc.csv,c,d,Name,f
a,Name(null)acb.csv,c,d,Name,f
a,Name(null)cba.csv,c,d,Name,f
这是我的尝试:
sed -r 's/(\(null)\).*csv//' file.csv
这里的问题是,正则表达式是太贪婪,但我不能停下来。 我也试过这样,跳过“空”中第一次出现:
sed -r '0,/null/! s/(\(null)\).*csv//' file.csv
也试过,但贪婪的正则表达式仍是问题。
sed -r 's/(\(null)\).*csv//2' file.csv
我读过?
可以使正则表达式“懒”,但我不能让它锻炼。
sed -r 's/(\(null)\).*?csv//' file.csv
如果你可能有3个或更多'(null)'s,并且你只想删除第二个事件,那么I t哼,使用'。*?'而不是'。*'来处理perl会更容易。 –