我想验证一个包含以下格式的多行文件:
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 ]*$