我想在bash中编写一个脚本来处理一个包含5列行的文件,我希望分隔符是一个单独的空格("")。
除此之外的一切都应该导致错误,甚至超过1个空间。
例如,该行是合法的:first last 1234124 complex no
虽然这个
first last 1234124 complex no
或
first_last 1234124 complex no
应该导致错误。
我已尝试过一些命令,但我尝试过的所有操作都处理了一个空格而不是一个 - 同样的方式。
等待你的知识分享。感谢。
答案 0 :(得分:1)
如果您使用正则表达式将awk中的字段分隔符设置为单个空格(而不是其他任何内容),则可以使用以下内容报告有问题的行
awk -F'[ ]' 'NF != 5' file.txt
答案 1 :(得分:1)
您可以在此正则表达式中使用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