Sed 如果第4和第5个分隔符之间的字符串为空,则删除行

Sed 如果第4和第5个分隔符之间的字符串为空,则删除行,sed,line,Sed,Line,如果在第四个分隔符之后,下一个分隔符在该行之后,则应删除 实际上,我是通过使用sed来实现的 "text";"text";"text";"text";;"text";"text" 这是一个可靠的解决方案吗 感谢您的帮助。删除包含的行在第四个分隔符之后: sed -n '/;;/!p' input.txt 确保位潜在转义双引号和内部“;”(感谢@SLePort的评论) 这可能适用于您(GNU-sed): 如果第四组双引号后跟分号,其中分组中的字符是引号和任何其他字符对,或者不是双引号,然后再跟

如果在第四个分隔符之后,下一个分隔符在该行之后,则应删除

实际上,我是通过使用sed来实现的

"text";"text";"text";"text";;"text";"text"
这是一个可靠的解决方案吗


感谢您的帮助。

删除包含
的行在第四个分隔符之后:

sed -n '/;;/!p' input.txt

确保位潜在转义双引号和内部“;”(感谢@SLePort的评论)

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

如果第四组双引号后跟分号,其中分组中的字符是引号和任何其他字符对,或者不是双引号,然后再跟一个分号,则删除该行

更有效的regexp是:

sed -r '/^("(\\.|[^"])*";){4};/d' file

这使用模式正常*(异常正常*)*

否,因为任何其他“空”字段也会着火,或者您可以假设任何其他字段都不能为空。Empty不是
。在处理列时,awk最初应该是跳入您头脑中的第一个命令;)由于
“这是一个;;双引号;或\“单引号”;“…”
,可能发生在stringFine中,如果没有
\”
,则比我的要好得多,OPworks great可能会假设这一点。所以如果a想检查是否在最后一次之后;下面是一些文本,我只需要将4替换为6?是或使用
从另一侧开始$
在这种情况下速度肯定更快,如果第四个字段前面的带引号的字符串包含
,则会失败。例如:
“文本”;“文本;文本”;“文本”;“文本”;;“文本”;“文本”
sed -e 'h;s/\\"//g' -e ':c' -e 's/^\(\("[^"]*";\)*"[^"]*\);/\1/;t c' -e '/^\([^;]*;\)\{4\};/d;h'
sed -r '/^([^;]+;){4}\s*;/d' input.txt
awk -F';' '$5' input.txt
sed -r '/^("(\\.|[^"])*";){4};/d' file
sed -r '/^("[^"\\]*(\\.[^"\\]*)*";){4};/d' file