如何从文件中删除换行符?
如何
<p> (break line!!!)
text...
</p> (break line!!!)
使用正则表达式从文件中删除:?
我试过:
find . -type f -exec perl -p -i -e "s/SEARCH_REGEX/REPLACEMENT/g" {} \;
How to remove:
<p> (break line!!!)
text...
</p> (break line!!!)
from a file with regex?
I tried:
find . -type f -exec perl -p -i -e "s/SEARCH_REGEX/REPLACEMENT/g" {} \;
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
这些东西真的会在你脸上爆炸,所以要小心;尝试在测试目录等中使用测试数据。
-0
开关将“关闭”默认记录分隔符 ($/
),以便您可以一次执行多行操作。s
让.
跨换行符匹配,而+?
则让它懒惰到“TERRANO”。对您的一个文件尝试此测试。如果有效,您可以将其添加到您的原始版本中。
正如评论中提到的,如果内容是 HTML,您可能应该使用 HTML 解析器。
This stuff can really blow up in your face so be careful; try it with test data in a test dir etc.
The
-0
switch will "turn off" the default record separator ($/
) so you can do multiple lines at once. Thes
lets.
match across newlines and the+?
is to make it lazy up to the "TERRANO." Try this test on one of your files.If that works, you can add it to your original.
As mentioned in a comment, if the content is HTML, you should probably be using an HTML parser.
有几种方法可以做到这一点。
首先是 undef
$\
。然后你匹配类似
/\
\nTERRANO.*\n\<\/p\>/
的内容,这可能取决于你是否使用 cr/lf,或者只是 lf's/
第二是使用循环来连接行(加上
$\
中的任何内容)并在一个正则表达式中进行匹配,包括匹配$\
中的任何内容。第三种方法是使用 File::Slurp。
第四是使用多个正则表达式和一个循环来匹配每一行,如果这三个都满足,则进行替换。
Several ways to do it.
First is to undef
$\
.Then you match something like
/\<p\>\nTERRANO.*\n\<\/p\>/
which may depend upon whether or not you are using cr/lf's, or just lf's/
Second is to use a loop to concatenate the lines (plus whatever is in
$\
) and match that in one regex, including matching whatever is in$\
.Third would be to use File::Slurp.
Fourth is to use several regexes and a loop to match each line, and if all three are satisfied, do your substitution.
您还可以使用 Unix 文本编辑器 ed 通过正则表达式删除一系列行:
You may also use the Unix text editor ed to remove a range of lines with regex:
您可能想使用多行正则表达式:
请参阅此处
You may want to use multi-line regexp:
See here