我有一些代码行,我试图删除一些前导文本,如下所示:
Line 1: myApp.name;
Line 2: myApp.version
Line 3: myApp.defaults, myApp.numbers;
我正在尝试并尝试查找将删除任何内容(但不包括在内)myApp
的正则表达式。
我尝试了各种正则表达式,但是当它遇到第3行时它们似乎都失败了(因为myApp出现了两次)。
我到目前为止最接近的是:
.*?myApp
非常简单 - 但它匹配第3行中myApp事件的两个实例 - 而我希望它只匹配第一个。
有几百行 - 否则我现在已全部手动删除它们。
有人能帮助我吗?感谢。
答案 0 :(得分:2)
您需要添加一个与行的起点匹配的锚^
^.*?(myApp)
使用上述正则表达式并将匹配的字符替换为$1
或\1
。这样你就可以在替换后的最终结果中得到字符串myApp
。
模式说明:
^
开始一行。.*?(myApp)
最短的可能匹配到第一个myApp
。捕获字符串myApp
并将其存储到一个组中。( group 1 )答案 1 :(得分:1)
如果添加^
以确保只匹配行的开头,则正则表达式在Perl中有效:
cat /tmp/test.txt | perl -pe 's/^.*?myApp/myApp/g'
myApp.name;
myApp.version
myApp.defaults, myApp.numbers;
如果你想获得幻想,你可以把'#34; myApp"使用(?=)
语法将一部分作为表达式的一部分捕获到的组中。这样就不必重新替换它。
cat /tmp/test.txt | perl -pe 's/^.*?(?=myApp)//g'
myApp.name;
myApp.version
myApp.defaults, myApp.numbers;