【发布时间】:2014-09-16 21:26:59
【问题描述】:
我想提取那些第 4 个字段不为空的行。 但以下 RE 不起作用:
^\([^,]*,\)\{3\}[^,][^,]*,.*$
然后我尝试打印捕获的组,结果让我很困惑。 似乎重复不起作用。 请哪位大神解释一下。
详情(见第4~6行):
$ cat tmp
1AAA,BBB,CCC,DDD,EEE,FFF
2AAA,BBB,CCC,DDD,EEE,FFF
3AAA,BBB,,DDD,EEE,FFF
4AAA,BBB,CCC,,EEE,FFF
5AAA,BBB,CCC,,EEE,FFF
6AAA,BBB,CCC,,EEE,FFF
7AAA,BBB,CCC,DDD,EEE,FFF
8AAA,BBB,CCC,DDD,EEE,FFF
9xxxxxxx
$ sed -n "/^\(\([^,]*,\)\{3\}\)\([^,][^,]*\)\(,.*\)$/ {s//\1/;p;}" tmp
1AAA,BBB,CCC,
2AAA,BBB,CCC,
3AAA,BBB,,
4AAA,BBB,
5AAA,BBB,
6AAA,BBB,
7AAA,BBB,CCC,
8AAA,BBB,CCC,
$ uname
HP-UX
【问题讨论】:
-
预期的输出是什么?
-
我想知道为什么打印了 4~6 行。 {3} 应该得到 3 个文件...但这些行只有两个文件。
-
我不知道你为什么使用复杂的命令来完成这个简单的任务。
-
你能解释一下正则表达式吗?