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

时间:2013-12-19 17:48:52

标签: bash delimiter

我想在bash中编写一个脚本来处理一个包含5列行的文件,我希望分隔符是一个单独的空格("")。 除此之外的一切都应该导致错误,甚至超过1个空间。 例如,该行是合法的:first last 1234124 complex no

虽然这个

first  last 1234124 complex no

first_last  1234124 complex no

应该导致错误。

我已尝试过一些命令,但我尝试过的所有操作都处理了一个空格而不是一个 - 同样的方式。

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

2 个答案:

答案 0 :(得分:1)

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

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