我有以下文本块(带有 \r\n 或 \n),我想用 sed 查找并删除它。
<?php
/*
*/
?>
我已经尝试了许多令人尴尬的事情(基于许多 SE 的答案)来删除这个已经惨遭失败的事情,而不是让水变得浑浊,什么是捕获和删除这种模式的正确方法?对 \n 或 \r\n 使用两个单独的 sed 命令也可以。
好的,我将分享两个糟糕的尝试:
sed 'N;s/<\?php\r\n\/\*\r\n\*\/\r\n\?>//g' file.txt
sed ':a;N;$!ba;s/<\?php\r\n\/\*\r\n\*\/\r\n\?>//g' file.txt
编辑:根据下面的答案,我尝试将其放入 PERL 递归例程中,以便搜索 .php 文件并修改它们。但是 $text 最终未定义。错误是“在 [line "print $text"] 的打印中使用未初始化的值 $text”
对不起,我以前没有用过perl...
#!/usr/bin/perl
use strict;
use warnings;
my $parent_dir = ".";
my $dir="";
my $file="";
process_dir($parent_dir);
sub process_dir {
my $dir = shift;
print "Processing $dir\n";
opendir(my $SCR , $dir) or die "Can't open $dir: $!";
while( defined (my $file = readdir $SCR) )
{
next if ($file =~ /\.$/ );
if ( $file =~ /\.php$/ ) {
&process_file();
} elsif ( -d "$dir/$file" ) {
print "directory : $dir/$file\n";
process_dir("$dir/$file/");
#next;
#} elsif ( $file
} else {
print "Else :$file\n" if ( -B "$dir/$file");
}
print "file -> $file\n";
}
closedir($SCR);
}
sub process_file{
my $text="";
open(my $fh, '<', "$dir/$file") or die "cannot open file $file";
{
local $/;
$text = <$fh>;
}
close($fh);
print "Before:\n";
print $text;
$text =~ s{ <\?php \s* \r?\n \s* /\* \s* \r?\n \s* \*/ \s* \r?\n \?> \s* \r?\n }{}gmx;
print "After:\n";
print $text;
}