如何从文件中删除换行符?

| 如何移除:
<p> (break line!!!)
text...
</p> (break line!!!)
从正则表达式的文件? 我试过了:
find . -type f -exec perl -p -i -e \"s/SEARCH_REGEX/REPLACEMENT/g\" {} \\;
    
已邀请:
这些东西真的会炸掉你的脸,所以要小心。尝试在测试目录等中使用测试数据
-0
开关将“关闭”默认的记录分隔符(
$/
),因此您可以一次执行多行。
s
使
.
跨换行符匹配,而
+?
是使其懒惰到\“ TERRANO。\”。请对您的一个文件尝试此测试。
perl -0 -p -e \'s/<p>.+?TERRANO[^<]*<\\/p>//gs\'
如果可行,您可以将其添加到原始文件中。
find . -type f -exec perl -0 -pi -e \"s/<p>.+?TERRANO[^<]*<\\/p>//gs\" {} \\;
如评论中所述,如果内容是HTML,则您可能应该使用HTML解析器。     
几种方法可以做到这一点。 首先是取消
$\\
的定义。 然后你匹配类似
/\\<p\\>\\nTERRANO.*\\n\\<\\/p\\>/
这可能取决于您使用的是cr / lf \,还是仅使用lf \ / 第二个方法是使用循环连接线(加上
$\\
中的所有内容)并匹配一个正则表达式中的行,包括匹配
$\\
中的任何内容。 第三是使用File :: Slurp。 第四是使用多个正则表达式和一个循环来匹配每一行,如果满足所有三个条件,请进行替换。     
您也可以使用Unix文本编辑器ed使用正则表达式删除一系列行:
str=\'
BEFORE MULTILINE PATTERN 1
<p> (break line!!!)
text...
</p> (break line!!!)
AFTER MULTILINE PATTERN 1
BEFORE MULTILINE PATTERN 2 
<p> (break line!!!)
text...
</p> (break line!!!)
AFTER MULTILINE PATTERN 2
\'

# for in-place file editing use \"ed -s file\" and replace \",p\" with \"w\"
# cf. http://wiki.bash-hackers.org/howto/edit-ed

cat <<-\'EOF\' | sed -e \'s/^ *//\' -e \'s/ *$//\' -e \'/^ *#/d\' | ed -s <(echo \"$str\")
  H
  # only remove the first match
  #/<p>/,/<\\/p>/d
  # remove all matches
  g/<p>/+0,/<\\/p>/+0d
  ,p
  q
EOF
    
您可能要使用多行正则表达式:
s/regexp/replacement/m
看这里     

要回复问题请先登录注册