我正在尝试grep以下字符串:
行必须以15开头,其余字符串可以在管道之间有任意长度的数字。最后两个管道之间一定没有任何东西。
"15|155702|0101|1||"
到目前为止,我有:
grep "^15|" $CONCAT_FILE_NAME >> "VAS-"$CONCAT_FILE_NAME
使用[0-9]
答案 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
开头并以||