如何检查一行是否具有这样的正确语法?

时间:2010-12-01 14:58:47

标签: bash shell

如果我有以下行语法

FirstName, FamilyName, Address, PhoneNo

我正在读取包含信息的数据文件,如何检查我是否使用正确的语法读取了一行?

UPDATE ::

我的意思是我发送给它的每一行(来自while循环)的函数,如果该行正确则返回0,如果该行不是则返回1?

UPDATE2 ::

正确的表格是

first name(string), last name(string), address(string),  phone no.(string)

所以,如果该行缺少一行或者如果超过4行,则应返回1,

使用Bash,

良好的输入是::

Rami, Jarrar, Jenin - Wadi berqen, 111 111

#处理的一些案例

, Jarrar, Jenin - Wadi berqen, 111 111

- Extra Spaces::
Rami,    Jarrar, Jenin - Wadi berqen, 111 111

Rami, Jarrar, Jenin - Wadi berqen, 111 111, 213 3123

还有另一个更新:)

check(){
x=$(echo "$@" | grep -q '^[^,]\+,[^,]\+,[^,]\+,[^,]\+$')
return $x
}

len=#number of lines in the file
i=1
while [ $i -le $len ]; do
line=$(cat $file)

#------this is where i call the func-----
check $line
if [ $? -eq 1 ];then
echo "ERROR"
else
echo "Good Line"
fi

BASH 2.3.39 * GREP 2.5.3 *

更新 现在,如果我制作正确的格式,如::

string, value, value, value

值:是正整数

该行应该替换::

x=$(echo "$@" | grep -q '^[^,]\+,[^,]\+,[^,]\+,[^,]\+$')

...

2 个答案:

答案 0 :(得分:2)

允许空字段:

check () { echo "$@" | grep -q '^[^,]*,[^,]*,[^,]*,[^,]*$'; }

不允许任何字段为空:

check () { echo "$@" | grep -q '^[^,]\+,[^,]\+,[^,]\+,[^,]\+$'; }

不使用外部实用程序的Bourne shell(允许空字段):

check () { local IFS=,; set -- $@; return $(test -n "$4" -a -z "$5"); }

Bash 3.2或更高版本(允许空字段):

check () { [[ $@ =~ ^[^,]*,[^,]*,[^,]*,[^,]*$ ]]; }

Bash 3.2或更高版本(不允许空字段):

check () { [[ $@ =~ ^[^,]+,[^,]+,[^,]+,[^,]+$ ]]; }

答案 1 :(得分:0)

is_correct () {
    grep -q '^[^ ][^,]\+, [^ ][^,]\+, [^ ][^,]\+, [^ ][^,]\+$' <<< "$@"
}
l=0
while read line ; do
    is_correct "$line" && echo line $l ok || echo Invalid syntax on line $l
    ((l+=1))
done <<<"Rami, Jarrar, Jenin - Wadi berqen, 111 111
, Jarrar, Jenin - Wadi berqen, 111 111
- Extra Spaces::
Rami,    Jarrar, Jenin - Wadi berqen, 111 111
Rami, Jarrar, Jenin - Wadi berqen, 111 111, 213 3123
A line, containg fields with, many spaces, but otherwise valid
a, b, c, d
aa, bb, cc, dd"

收率:

line 0 ok
Invalid syntax on line 1
Invalid syntax on line 2
Invalid syntax on line 3
Invalid syntax on line 4
line 5 ok
Invalid syntax on line 6
line 7 ok

正确地抛出除样本好的线以外的所有线,包括“太多空格”的情况。它失败的唯一地方是字段中只有一个字符。