检查文件中是否一次存在所有变量

时间:2018-04-08 21:16:30

标签: shell variables grep exists

下面是do循环脚本,用于检查.sas7bdat文件中是否存在变量,并且它正常工作。但是有没有办法检查如果文件中存在所有变量然后分配一些值。

rword = var1 var2 var3 var4

for rwords in  $rword
   do
   cat $path | grep -i  $rwords
   if [ $? -gt  0 ];
   then
      echo "$rwords DOES NOT EXIST"
    exit
   else 
    echo "$rwords EXIST"    
   fi
 done

谢谢

2 个答案:

答案 0 :(得分:0)

使用grep -q

检查任何单词

if grep -qE -- "$var1|$var2|$var3|var4" "$path"; then

检查所有单词

if grep -q -- "$var1" "$path" && grep -q -- "$var2" "$path" && grep -q -- "$var3" "$path"; then

检查单个单词

if ! grep -q -- "$var1" "$path"; then

答案 1 :(得分:0)

由于所有变量名称都是唯一的,因此您可以执行以下操作:

if [ "$(grep --count --extended-regexp --ignore-case 'var1|var2|var3|var4' "$path")" -eq 4 ]
then
    [all variables exist]
fi

当然,这在几个方面都很脆弱:

  • 它会多次计算同一个变量的多次出现次数,因此,如果您有两次“{1}”而没有var3则会错误地成功。
  • 它会计算变量名称在文件中的变量值,注释或其他数据结构中的出现次数。
  • 它会计算子串匹配,例如var4

更好的解决方案是使用可以可靠地解析格式的库(例如sas7bdat)。 Bash is just bad at parsing any kind of complex file format.