counting/validating 管道的正则表达式

regex for counting/validating the pipe

我想验证一个包含多行格式的文件:

alphanumeric_word_with_spaces|alphanumeric_word_with_spaces|alphanumeric_word_with_spaces|alphanumeric_word_with_spaces|alphanumeric_word_with_spaces|alphanumeric_word_with_spaces|alphanumeric_word_with_spaces

所以基本上,该行是管道分隔的,我现在需要检查管道的数量是否等于一个变量,比如 10。管道的数量不能大于或小于 10 。 有些单词也可能是空字符串,例如“||||”。我只需要验证管道计数。里面有什么不重要。

那个的正则表达式是什么? 我在 linux.

上使用 shell 脚本来执行此操作

此外,这只是一行。我在一个文件中有多行(数万条记录)。执行验证的最佳方法是什么?我读过 sed 和其他东西,但我不确定哪个更快。

只数管道数:

^([^|]*\|){10}[^|]*$

强制值也是 alpha/space:

^(?i)[a-z ]*\|){10}[a-z ]*$

文件input.txt:

a b c|a 1 b|a 1 b|a 1 b|a 1 b|a 1 b|a 1 b
a 1 b|a 1 b|a 1 b|a 1 b|a 1 b|a 1 b|a 1 b|a 1 b|a 1 b|a 1 b| 2 S
a 1 b|a 1 b|a 1 b|a 1 b|a 1 b|a 1 b|a 1 b|a 1 b|a 1 b|a 1 b|a 1 b|a 1 b|a 1 b|a 1 b|a 1 b

脚本可以是:

#!/bin/bash
#
inputfile="input.txt"

if [[ ! -f "$inputfile" ]]
then
    echo "The input file does not exist."
    exit 1
else
    while read -r line
    do
        echo "LINE=$line"
        pipe_count=$(echo "$line" | awk -F'|' '{print NF-1}')
        if [[ $pipe_count == 10 ]]
        then
            echo "OK, 10 |"
        else
            echo "NOT OK, only $pipe_count |"
        fi
        echo ""
    done <"$inputfile"
fi