【问题标题】:Escaping bash variables for regular expression containing double quote, parentheses为包含双引号、括号的正则表达式转义 bash 变量
【发布时间】:2011-10-18 16:27:53
【问题描述】:

这对于 regex pro 来说肯定是显而易见的,但我找不到任何方法来实现这一点。

我想在对匹配正则表达式的行进行分组后将一个大的 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

这会导致 ( 或 (

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

【问题讨论】:

标签: regex bash escaping split


【解决方案1】:

有两个错误:

  1. 不计算单引号内的 Shell 变量。

  2. grep一起使用

    "^(\"${country_code}" 
    

    匹配字符串。不要转义 ( 字符。

【讨论】:

    猜你喜欢
    • 2013-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-01
    • 2010-10-16
    • 2013-10-01
    相关资源
    最近更新 更多