以下是非常大的文件的一部分:
AX1 -0.7766512832 0.5148273234 4.2786094015 >
1.7946619816 0.7753532457 1.8759964126 0.3364947702 >
0.9685478959 0.3507513619 0.3894364805 0.7390333869 >
0.3061019863
AX9 -2.4577177384 -0.4989707852 -1.3388532333 >
2.1316147211 0.6123791026 2.7070013136 0.4139841780 >
-0.1511381820 0.3962115748 0.2241446997 -0.4274101066 >
0.4097737023
AX20 -1.9584498342 -0.3207285057 0.5492832625 >
5.8330021421 0.6706829149 2.3033089678 0.5822925912 >
2.6239469531 0.5245128606 0.8995560125 1.4869098981 >
0.0473609746
我必须删除>线条末尾的字符以图案'开头。 AX' (空白+ AX)。我可以在这里识别出两种模式:1。如果行以'开头AX',然后删除最后一个字符;或2.如果一行中的第58个字符是'>',则删除该'>'。所以它看起来像:
AX1 -0.7766512832 0.5148273234 4.2786094015
1.7946619816 0.7753532457 1.8759964126 0.3364947702 >
0.9685478959 0.3507513619 0.3894364805 0.7390333869 >
0.3061019863
AX9 -2.4577177384 -0.4989707852 -1.3388532333
2.1316147211 0.6123791026 2.7070013136 0.4139841780 >
-0.1511381820 0.3962115748 0.2241446997 -0.4274101066 >
0.4097737023
AX20 -1.9584498342 -0.3207285057 0.5492832625
5.8330021421 0.6706829149 2.3033089678 0.5822925912 >
2.6239469531 0.5245128606 0.8995560125 1.4869098981 >
0.0473609746
你能帮助我使用sed或perl单行程来完成这项工作吗?谢谢!
答案 0 :(得分:0)
perl -pe 's/^ AX.*\K>$//mg' yourfile
为安全起见,我没有给你选择直接在文件中替换它,所以你可以先测试它。但是,如果要直接替换文件的内容,请使用-i -pe
或进行备份:
perl -i'.bak' -pe 's/^ AX.*\K>$//mg' yourfile
<强>解释强>
m
标志启用了多行模式,允许^
和$
在每一行匹配^
锚点断言我们位于字符串的开头AX
匹配文字.*
让我们走到行尾\K
告诉引擎放弃与其返回的最终匹配项目匹配的内容>
匹配您要替换的字符$
锚点断言我们位于字符串的末尾