用于计数/验证管道的regex



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

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和其他东西,但我不确定哪个会更快。

Fileinput.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

清点管道:

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

强制值也是alpha/space:

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

相关内容

  • 没有找到相关文章

最新更新