我正在尝试修改大型代码库中的if循环。我需要如下。
代码可能包含如下。这只是if条件的随机组合示例。如果条件单独,我需要修改if else。
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.Any帮助吗?
答案 0 :(得分:2)
你可以使用任何支持正则表达式替换的语言来完成它。
以下是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))
答案 1 :(得分:2)
sed -r 's/([[:alpha:]])([=!]=)([[:alpha:]])/string.Compare(\1,\3) \2 0/g'
\2
周围的空格并非绝对必要。
答案 2 :(得分:0)
基本上,您无需使用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
运算符。请参阅this chapter of bash
manual(向下滚动到test
命令)和description of usage of primary conditional expressions