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