Экранирующие переменные bash для регулярного выражения, содержащего двойные кавычки и круглые скобки - PullRequest
0 голосов
/ 18 октября 2011

Это должно быть очевидно для regex pro, но я не могу найти способ сделать это.

Я хочу разбить большой файл sql на несколько после группировки строк, которые соответствуют регулярному выражению ...

Итак, я получил массив, содержащий коды стран.Я получил файл 700 Мб с тысячами строк, начиная с кода страны.Я хочу разбить файл на несколько файлов в зависимости от кода страны.

Например, строка:

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

Итак, я хочу сопоставить ("ZA", Я знаю, как выполнить поиск grepчерез bash,

grep '("ZA"' data.sql

Моя проблема в том, когда я хочу выполнить итерацию с помощью сценария bash и инкапсулировать результат в переменную для перенаправления вывода в файл ... Я наткнулся на двойную кавычку, скобки выходят...

#!/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

Это приводит к ошибке с (или (*

Кто-нибудь получил подсказки или альтернативное решение для достижения этой цели?

1 Ответ

0 голосов
/ 18 октября 2011

Есть две ошибки:

  1. Переменные оболочки внутри одинарных кавычек не оцениваются.

  2. При grep использовать

    "^(\"${country_code}" 
    

    для соответствия строке.Не избегайте символа (.

...