sed中的多行匹配


sed中的多行匹配,可以用N,N的意思是把下一行寫入保持空間,保持空間可能不好理解,可以理解為機器的內存一樣,把一下行也寫入內存,可能會好理解多了,當把一下行也寫入保持空間的時間,轉行符"\n",也可以用.*匹配到了,前幾天在幫開發做全局替換,在一對php標簽中,替換里面的兩行內容,其他有兩個字段組合起來就是整個頁面都是唯一的

<?php

$_web = str_replace(array('s-','www.'),'',$_web);\
$_webcontents = file_get_contents("http://test.com/index.php?url=".$_web);

?>

內容大概就是上面的東西

替換腳本

#!/bin/bash
cd /usr/local/nginx/html/mytest/
for i in `ls -d test*`
do
grep file_get_contents ${i}/vip.dwt &>/dev/null && s=0||s=1
if [ $s -eq 0 ];then
sed -i '
/<\?php/{                                                               ###匹配<?php
N                           ###把下一行寫入保持空間,(用內存表達會好理解些)
/<\?php.*str_replace/{                ###然后再把<?php與這么里的關鍵字進行匹配,這里的.*已經可以匹配到"\n"
N                           ###再把下一行寫入保持空間
/<\?php.*str_replace.*file_get_contents/{      ###把上面匹配到的兩個再加上這一行進行匹配
/.*str_replace.*file_get_contents.*/c\                        ###開始替換的東西,用c,\是表示換行,替換的東西不用做轉義
<?php \
function curl_get_contents($url,$timeout=1) { \
$curlHandle = curl_init(); \
curl_setopt( $curlHandle , CURLOPT_URL, $url ); \
curl_setopt( $curlHandle , CURLOPT_RETURNTRANSFER, 1 ); \
curl_setopt( $curlHandle , CURLOPT_TIMEOUT, $timeout ); \
$result = curl_exec( $curlHandle ); \
curl_close( $curlHandle ); \
return $result; \
}\
$_web = str_replace(array('s-','www.'),'',$_web);\                           ###這里得注意了,如果是用單引號,這里替換后單引號會沒有,改成雙引號就不存在問題
$_webcontents = curl_get_contents("http://test.com/index.php?url=".$_web);
}

}

}' ${i}/vip.dwt
fi

cd /usr/local/nginx/html/mytest/
done

上面的代碼,大概意思就是,進入目錄,查找有test的文件夾,然后進行循環,查找文件夾里vip.dwt文件,里能找出,則s=0,再進行替換.

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM