用于操作if循环的Shell脚本

时间:2011-05-10 06:15:20

标签: shell sed awk

我正在尝试修改大型代码库中的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帮助吗?

3 个答案:

答案 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)

基本上,您无需使用awksed来构建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