Скрипт оболочки для манипулирования циклом if - PullRequest
1 голос
/ 10 мая 2011

Я пытаюсь изменить цикл if в большой базе кода. Мне нужно следующее.

Код может содержать следующее. Это пример случайной комбинации условия if. Мне нужно изменить if if, если условия одни.

if((A==B)&&(C==D)&&((E==F)||(G==H))||(I)&&(J!=K))

следует изменить как

 if((string.Compare(A,B)==0)&&(string.Compare(C,D)==0)&&((string.Compare(E,F)==0)||(string.Compare(G,H)==0))||(I)&&(string.Compare(J,K)!=0))

Я пробовал с Java, но потерпел неудачу. Я считаю, что это возможно с помощью sed или awk. Любая помощь?

Ответы [ 3 ]

2 голосов
/ 10 мая 2011

Вы можете сделать это в основном на любом языке, который поддерживает замену регулярных выражений.

Вот 3 строки, работающие C # пример:

string text = "if((A==B)&&(C==D)&&((E==F)||(G==H))||(I)&&(J!=K))";
string pattern = @"\((?:(\w)((?:=|!)=)(\w))\)";
var replaced = Regex.Replace(text, pattern, m => string.Format("(string.Compare({0},{1}){2}0)", m.Groups[1].Value, m.Groups[3].Value, m.Groups[2].Value));

Console.WriteLine(replaced);

И результат:

if((string.Compare(A,B)==0)&&(string.Compare(C,D)==0)&&((string.Compare(E,F)==0)||(string.Compare(G,H)==0))||(I)&&(string.Compare(J,K)!=0))

2 голосов
/ 10 мая 2011
sed -r 's/([[:alpha:]])([=!]=)([[:alpha:]])/string.Compare(\1,\3) \2 0/g'

Пробелы вокруг \2 не являются строго необходимыми.

0 голосов
/ 10 мая 2011

Обычно вам не нужно использовать awk или sed для построения оператора if.Достаточно написать:

if [ A == B -a C == D -a ( E == F -o G == H ) -o I -a J != K ]; then
    your code here
fi

Оператор == сравнивает строки.Если вы хотите сравнить числа, используйте оператор -eq.См. эту главу bash руководство (прокрутите вниз до команды test) и описание использования основных условных выражений

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...