记事本++&贝壳 。如何在等于' ='的两侧进行转置?符号

时间:2016-05-06 11:11:38

标签: regex shell unix awk notepad++

想在记事本中看到++& shell如何在等于'='符号的任一侧进行转置注意=周围的变化和缩进的空格也会发生变化。

AND TBz.C1  =   C1.x1
        AND C1.x2        =  TBv.C3
                  AND TBg.p1 =       C1.r3
    AND Tbp.sx    = C1.hx

O / p:所有C1都应该在一边

    AND  C1.x1 = TBz.C1 
    AND C1.x2  = TBv.C3
    AND C1.r3  = TBg.p1 
    AND C1.hx  = Tbp.sx 

我尝试了什么 - 在awk之后使用=在缓冲区和转置中的所有内容但在所有情况下都不会转置。 寻找 - N ++ Notepad ++和基于shell的解决方案。我必须经常在Red H盒子和W7上这样做。 PL花点时间打破你的正则表达式的步骤并向我解释发生了什么 谢谢

2 个答案:

答案 0 :(得分:2)

此awk单行将格式化您的源代码并将C1...移至=的左侧:

awk '$4~/^C1/{t=$4;$4=$2;$2=t}{$1=$1}7' file

使用给定数据进行测试:

kent$  cat f
AND TBz.C1  =   C1.x1
        AND C1.x2        =  TBv.C3
                  AND TBg.p1 =       C1.r3
    AND Tbp.sx    = C1.hx

kent$  awk '$4~/^C1/{t=$4;$4=$2;$2=t}{$1=$1}7' f
AND C1.x1 = TBz.C1
AND C1.x2 = TBv.C3
AND C1.r3 = TBg.p1
AND C1.hx = Tbp.sx

答案 1 :(得分:1)

我建议您先使用插件来调整代码。

例如,您可以使用Code alignment。这可以通过插件管理器安装。 (通过" ="对齐插件是内置的快捷方式。)

完成上述操作后,最后一步更具体针对您的用例,因此您需要手动执行此操作。您的代码目前看起来像:

AND  C1.x1 = TBz.C1
AND C1.x2  = TBv.C3
AND TBg.p1 = C1.r3
AND Tbp.sx = C1.hx

现在您需要做的就是使用捕获组搜索并替换任何有问题的代码行以重新排序。有关Notepad ++ regex的完整文档,请参阅here

例如,您可以搜索:

AND (.*) = (C1.*)

并替换为:

AND \g2 = \g1

因此切换订单。

白色空间可能会再次略微混乱,在这种情况下,您可以重新运行自动对齐插件。