2011-10-18 55 views
0

这对于正则表达式pro必须是显而易见的,但我找不到任何方式来实现它。为正则表达式转义的bash变量包含双引号,圆括号

我想分组匹配正则表达式的行之后拆分大型SQL文件分成几个的...

所以我就含有国家代码的数组。 我得到了一个700mb的文件,其中有数千行以国家代码开头。 我想根据这个国家代码将文件分成几个文件。

例如一条线是:

("ZA", "EN", 11564, "ZA-WC", "Western Cape", "West Coast (DC1)", "Swartland", "", "7310", "Moorreesburg", "", "", -33.15528, 18.65639, "Africa/Johannesburg", "UTC+2", "N"), 

所以我想匹配("ZA", 我知道如何通过bash的grep显示它,

grep '("ZA"' data.sql 

我的问题是,当我想用​​一个迭代bash脚本和封装结果到一个var重定向输出到一个文件...我偶然发现双引号括号转义...

#!/bin/bash 

country_code_list_path="country_code.txt" 
for country_code in $(cat "$country_code_list_path"); 
do echo $country_code; 
result=`grep '^\(\""$country_code"\", ' geodata.sql| tail -1`; 
echo $result; 
done 

这个结果出错(或(

任何人都有提示或替代解决方案来实现这一点?

+0

如何在bash http://stackoverflow.com/questions/11856054/bash-easy-way-to-pass-a-raw-string-to-grep/16951928#16951928 –

回答

0

有两个误区:单引号内

  1. 壳牌变量不被评估。

  2. 随着grep使用

    "^(\"${country_code}" 
    

    相匹配的字符串。不要逃避(-character。

+0

逃脱正则表达式现在对我来说更加清楚。按预期工作。非常感谢。 – Franck

相关问题