未知长度的Grep通配符在管道之间

时间:2013-12-20 22:19:53

标签: grep

我正在尝试grep以下字符串:

行必须以15开头,其余字符串可以在管道之间有任意长度的数字。最后两个管道之间一定没有任何东西。

"15|155702|0101|1||"

到目前为止,我有:

grep "^15|" $CONCAT_FILE_NAME >> "VAS-"$CONCAT_FILE_NAME

使用[0-9]

时,我无法指定任意长度的数字

3 个答案:

答案 0 :(得分:1)

您需要转义|

grep -E '^15\|([[:digit:]]+\|)+\|$'

答案 1 :(得分:1)

假设开头必须以15|开头,并且总共有5个管道(|),并且最后两个管道之间没有任何内容..以及第二个第3和第4个管道之间的任意数字。

grep "^15\|[0-9]*\|[0-9]*\|[0-9]*\|\|$" $CONCAT_FILE_NAME >> "VAS-"$CONCAT_FILE_NAME

答案 2 :(得分:1)

使用awk

cat file
15|155702|0101|1||
15|155702|0101|1|test|
16|155702|0101|1||

awk -F\| '/^15/ && !$(NF-1)' file
15|155702|0101|1||

只有当它以15开头且第二个最后一个字段(由|分隔为空白时才会打印一行

所以这将是:

VAS-CONCAT_FILE_NAME=$(awk -F\| '/^15/ && !$(NF-1)' <<<"$CONCAT_FILE_NAME")

另一个较短的正则表达式

awk '/^15.*\|\|$/' file

搜索以15开头并以||

结尾的所有行