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

时间:2017-03-10 13:27:27

标签: sed line

"text";"text";"text";"text";;"text";"text"

如果在第4个分隔符之后,下一个分隔符将在该行之后删除。

实际上我是通过使用sed

来做到这一点的
sed -n '/;;/!p' input.txt

这是一个可靠的解决方案吗?

感谢您的帮助。

4 个答案:

答案 0 :(得分:1)

保护有点潜在的双重报价和内部";" (感谢@SLePort发表评论)

sed -e 'h;s/\\"//g' -e ':c' -e 's/^\(\("[^"]*";\)*"[^"]*\);/\1/;t c' -e '/^\([^;]*;\)\{4\};/d;h'

答案 1 :(得分:0)

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

sed '/^\("*[^"]*"*;\)\{4\};/d' input.txt

答案 2 :(得分:0)

sed -r '/^([^;]+;){4}\s*;/d' input.txt
awk -F';' '$5' input.txt

答案 3 :(得分:0)

这可能适合你(GNU sed):

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

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

更有效的正则表达式是:

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

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