我想打印以" if($ EN)"开头的区域(多于一行)并以"?>"结束 我想使用sed - 但我可以使用其他解决方案
第一种方法:
cat modal_27001.inc.php | sed -n '/if/,/?>/p'
正在运作,但也提供了从例如if($ ABC)
以下不正在工作,我不知道为什么
cat modal_27001.inc.php | sed -n '/if\(\$EN\)/,/?>/p'
有人可以告诉我为什么吗?
感谢rob
编辑: 这是一个简短的测试文件 我想提取前8行(但并不总是前8行)
<?php
if ($EN) {
echo "Watschnpladdla Wurscht Vergeltsgott gscheckate ";
echo "Bua pfenningguat Semmlkneedl";
echo "Blosmusi heitzdog nia Edlweiss Sauakraud";
echo "Milli, des is schee i mechad ";
}
?>
<?php
if ($BCD) {
echo "Hemad san Servas. Großherzig gscheckate";
echo "Jodler Kuaschwanz wiavui,";
echo "Watschnbaam resch Sauwedda, i mog di";
echo "Brotzeit Guglhupf sammawiedaguad ";
}
?>
<?php
echo "02397450923754ß3258764ß95867"
?>
结果应该是
if ($EN) {
echo "Watschnpladdla Wurscht Vergeltsgott gscheckate ";
echo "Bua pfenningguat Semmlkneedl";
echo "Blosmusi heitzdog nia Edlweiss Sauakraud";
echo "Milli, des is schee i mechad ";
}
?>
甚至更好:
<?php
if ($EN) {
echo "Watschnpladdla Wurscht Vergeltsgott gscheckate ";
echo "Bua pfenningguat Semmlkneedl";
echo "Blosmusi heitzdog nia Edlweiss Sauakraud";
echo "Milli, des is schee i mechad ";
}
?>
答案 0 :(得分:0)
我假设您只想打印您的比赛,因为您说:我想打印区域(多于一行)
首先是这个正则表达式:
可以匹配你想要的。
但是如果你想打印它,我对 sed 知之甚少,但我仍然可以用 Perl
说你有这个文件:
if ($BCD) {
echo "Hemad san Servas. Großherzig gscheckate";
echo "Jodler Kuaschwanz wiavui,";
echo "Watschnbaam resch Sauwedda, i mog di";
echo "Brotzeit Guglhupf sammawiedaguad ";
}
?>
<?php
echo "02397450923754ß3258764ß95867"
?>
<?php
if ($EN) {
echo "Watschnpladdla Wurscht Vergeltsgott gscheckate ";
echo "Bua pfenningguat Semmlkneedl";
echo "Blosmusi heitzdog nia Edlweiss Sauakraud";
echo "Milli, des is schee i mechad ";
}
?>
if ($BCD) {
echo "Hemad san Servas. Großherzig gscheckate";
echo "Jodler Kuaschwanz wiavui,";
echo "Watschnbaam resch Sauwedda, i mog di";
echo "Brotzeit Guglhupf sammawiedaguad ";
}
?>
<?php
echo "02397450923754ß3258764ß95867"
?>
<?php
if ($EN) {
echo "Watschnpladdla Wurscht Vergeltsgott gscheckate ";
echo "Bua pfenningguat Semmlkneedl";
echo "Blosmusi heitzdog nia Edlweiss Sauakraud";
echo "Milli, des is schee i mechad ";
}
?>
<?php
if ($BCD) {
echo "Hemad san Servas. Großherzig gscheckate";
echo "Jodler Kuaschwanz wiavui,";
echo "Watschnbaam resch Sauwedda, i mog di";
echo "Brotzeit Guglhupf sammawiedaguad ";
}
?>
<?php
echo "02397450923754ß3258764ß95867"
?>
您的图案有多个匹配,如果您只想一次,只需打印即可
perl -lne ' $/=undef;/\s+if(?:\s+)?\(\$EN\).*?\?\>/s && print $&' file
输出
if ($EN) {
echo "Watschnpladdla Wurscht Vergeltsgott gscheckate ";
echo "Bua pfenningguat Semmlkneedl";
echo "Blosmusi heitzdog nia Edlweiss Sauakraud";
echo "Milli, des is schee i mechad ";
}
?>
或多次:
perl -lne ' $/=undef; print $& while /\s+if(?:\s+)?\(\$EN\).*?\?\>/gs' file
输出
if ($EN) {
echo "Watschnpladdla Wurscht Vergeltsgott gscheckate ";
echo "Bua pfenningguat Semmlkneedl";
echo "Blosmusi heitzdog nia Edlweiss Sauakraud";
echo "Milli, des is schee i mechad ";
}
?>
if ($EN) {
echo "Watschnpladdla Wurscht Vergeltsgott gscheckate ";
echo "Bua pfenningguat Semmlkneedl";
echo "Blosmusi heitzdog nia Edlweiss Sauakraud";
echo "Milli, des is schee i mechad ";
}
?>
也适合你的
更好
perl -lne ' $/=undef; print $& while /\<\?php(?:\s+)?if(?:\s+)?\(\$EN\).+?\?\>/gs' file
输出
<?php
if ($EN) {
echo "Watschnpladdla Wurscht Vergeltsgott gscheckate ";
echo "Bua pfenningguat Semmlkneedl";
echo "Blosmusi heitzdog nia Edlweiss Sauakraud";
echo "Milli, des is schee i mechad ";
}
?>
<?php
if ($EN) {
echo "Watschnpladdla Wurscht Vergeltsgott gscheckate ";
echo "Bua pfenningguat Semmlkneedl";
echo "Blosmusi heitzdog nia Edlweiss Sauakraud";
echo "Milli, des is schee i mechad ";
}
?>
答案 1 :(得分:0)
在许多sed
方言中,不反斜杠括号。
另外,cat
is useless。
sed -n '/if(\$EN)/,/?>/p' modal_27001.inc.php
许多sed
方言也有-E
或-r
这样的选项来启用扩展(又称“现代”)正则表达式,但这究竟是什么意思以及调用的选项取决于关于sed
的版本。