检查每行的特定分隔符-bash

检查每行的特定分隔符-bash,bash,delimiter,awk,Bash,Delimiter,Awk,我想在bash中编写一个脚本来处理一个文件,该文件的行有5列,并且我希望分隔符是一个空格(“”)。 除此之外的所有内容都会导致错误,甚至超过1个空格。 例如,该行是合法的:first last 1234124 complex no 而这 first last 1234124 complex no 或 应该会导致错误 我试过一些命令,但我试过的每件事都处理一个空格和多个空格——同样的方式 等待被你的知识分享。谢谢。如果使用正则表达式将字段分隔符设置为单个空格(而不是其他空格),则可以使用下面的

我想在bash中编写一个脚本来处理一个文件,该文件的行有5列,并且我希望分隔符是一个空格(“”)。 除此之外的所有内容都会导致错误,甚至超过1个空格。 例如,该行是合法的:
first last 1234124 complex no

而这

first  last 1234124 complex no

应该会导致错误

我试过一些命令,但我试过的每件事都处理一个空格和多个空格——同样的方式


等待被你的知识分享。谢谢。

如果使用正则表达式将字段分隔符设置为单个空格(而不是其他空格),则可以使用下面的命令报告有问题的行

awk -F'[ ]' 'NF != 5' file.txt

您可以将
grep-qP
与此正则表达式一起使用:

grep -qP '^(\S+\s){4}\S+$'
测试:

> s='first last 1234124 complex no'
> grep -qP '^(\S+\s){4}\S+$' <<< "$s" && echo "valid" || echo "invalid"
valid

> s='first   last 1234124 complex no'
> grep -qP '^(\S+\s){4}\S+$' <<< "$s" && echo "valid" || echo "invalid"
invalid
>s='first last 1234124复合体编号'

>grep-qP'^(\S+\S){4}\S+$“grep-qP'^(\S+\S){4}\S+$”谢谢,你能解释一下每个标志和参数的作用吗?-q表示安静,-P表示PCRE,然后
^(\S+\S){4}\S+$
是正则表达式,其中
\S
匹配非空格而
\S
匹配空格
> s='first last 1234124 complex no'
> grep -qP '^(\S+\s){4}\S+$' <<< "$s" && echo "valid" || echo "invalid"
valid

> s='first   last 1234124 complex no'
> grep -qP '^(\S+\s){4}\S+$' <<< "$s" && echo "valid" || echo "invalid"
invalid