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