0

我的文本文件有很多这样的行:

12345|any string |5585|more string|yet more string|safdowdjfpd|wdfiojeif

我想在代码之前找到有这个的一行,一个空值:

12345|any string|5585||yet more string|safdowdjfpd|wdfiojeif

文件中还有其他行具有空字符串,因此必须仅捕获第 3 和第 4 个管道符号。

4

5 回答 5

1

一个非常简单的字符串匹配:

/\|\|..\|/

这匹配 || 后跟任意两个字符并以 | 结尾

于 2013-04-10T10:51:26.317 回答
1

试试这个

/.*\|.*\|.*\|\|.*/

用 egrep 测试

[root@srv test]# echo "12345|any string|5585|annoying string|CODE|safdowdjfpd|wdfiojeif" | egrep -o ".*\|.*\|.*\|\|.*"
[root@srv test]#

[root@srv test]# echo "12345|any string|5585||CODE|safdowdjfpd|wdfiojeif" | egrep -o ".*\|.*\|.*\|\|.*"
12345|any string|5585||CODE|safdowdjfpd|wdfiojeif
[root@srv test]#
于 2013-04-10T10:53:46.153 回答
1

这匹配任何包含连续管道的字符串,这些是字符串的第 3 和第 4 个管道:

^[^|]+\|[^|]+\|[^|]+\|\|

火柴:

12345|any string|5585||yet more string|safdowdjfpd|wdfiojeif

不匹配:

12|345|any string|5585||yet more string|safdowdjfpd|wdfiojeif
12345|any string|5585|yet more string|safdowdjfpd|wdfiojeif
于 2013-04-10T11:35:27.590 回答
0

到目前为止,您尝试过哪些模式?\\|{2}在他们当中吗?

于 2013-04-10T10:53:31.310 回答
0

计算该位置的 [任何字符] 的数量:

/.+\|.+\|.+{0}\|.+\|.+\|.+\|.+/
于 2013-04-10T10:55:28.357 回答