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,再进行替换.

sed中的多行匹配

时间: 2025-01-12 03:33:41

sed中的多行匹配的相关文章

sed删除文本第一个匹配行

源文本如下,要求删除第一个为happy-123456的行. ----------------------------- aaaaaaa happy-123456 bbbbbb asdasawe happy-123456 dsafsdfsd sagasdfasd happy-123456 ------------------------------ 目标文本: ----------------------------- aaaaaaa bbbbbb asdasawe happy-123456 ds

sed修炼系列(四):sed中的疑难杂症

本文目录:1 sed中使用变量和变量替换的问题2 反向引用失效问题3 "-i"选项的文件保存问题4 贪婪匹配问题5 sed命令"a"和"N"的纠葛 1.sed中使用变量和变量替换的问题 在脚本中使用sed的时候,很可能需要在sed中引用shell变量,甚至想在sed命令行中使用变量替换.也许很多人都遇到过这个问题,但引号却死活调试不出正确的位置.其实这不是sed的问题,而是shell的特性.搞懂sed如何解决引号的问题,对理解shell引号问题有

sed中的N,P,D

N 把匹配的行写入保持空间,可个觉得可以理解为把匹配到的行写入一个新的文件中,这样会比较好理解,行与行之前用以用.*匹配到"\n",或者是直接用"\n"直接      进行匹配,平时在模式空间(可能理解为你要处理的文字,如你是一个file里面的文字),".* "是不能匹配到"\n"的 P 大写p,把模式空间中匹配到的行写入到保持空间,但只输出匹配到的行或者是部分,即成功匹配到两行,但只输出第一行 D 道理跟P相似,把匹配到的,

sed 删除最后几行 和删除指定行 awk使用

sed 删除最后几行 和删除指定行 转载原文链接:http://blog.51cto.com/lspgyy/1305489 sed 想删除文件中的指定行,是可以用行号指定也可以用RE来匹配的. 删除指定的行[可以指定行号删除.匹配字符串来删除] [[email protected] ~]# cat -n seq.txt 1 ok i will help you 2 understand sed usage 3 how to use it 4 and we should use it in vie

linux查询文件中某几行

查询文件中某几行: sudo cat /etc/tinyproxy.conf | head -n 32 | tail -n +29 [一]从第3000行开始,显示1000行.即显示3000~3999行 cat filename | tail -n +3000 | head -n 1000 [二]显示1000行到3000行 cat filename| head -n 3000 | tail -n +1000 *注意两种方法的顺序 分解: tail -n 1000:显示最后1000行 tail -n

整理sed实战修改多行配置技巧

整理sed实战修改多行配置技巧,以下部分内容转自老男孩老师博客! http://oldboy.blog.51cto.com/2561410/1610998 老男孩老师有关sed实战技巧分享,来自课堂教学内容实战1.在指定行前插入两行内容,分别为oldboy和oldgirl.提示:被修改的文件内容必须要大于等于2行 1 sed -i '2 ioldboy\noldgirl' sshd_config 2.企业实战例子:快速更改SSH配置(一键完成增加若干参数)   2.1 在文件sshd_confi

循环删除DataTable.Row中的多行问题

在C#中,如果要删除DataTable中的某一行,大约有以下几种办法: 1,使用DataTable.Rows.Remove(DataRow),或者DataTable.Rows.RemoveAt(index):可以直接删除行 2,datatable.Rows[i].Delete().Delete()之后需要datatable.AccepteChanges()方法确认完全删除,因为Delete()只是将相应列的状态标志为删除,还可以通过datatable.RejectChanges()回滚,使该行取

笔趣阁小说-雪中悍刀行-爬虫源代码

1 import re 2 import requests 3 from bs4 import BeautifulSoup 4 5 url = 'http://www.biquge6.com/11_11147/' 6 r = requests.get(url) 7 b = BeautifulSoup(r.content.decode('gbk')) 8 h = b.find_all(href = re.compile('/11_11147/')) #正则匹配属性值带有/104_104216/的h

Java如何取源文件中文件名和行号

package com.github.jdk; /**  * Java如何取源文件中文件名和行号  *   * {@code StackTraceElement}的定义详见文档  *   * @author doctor  *  * @time 2015年3月13日 上午9:16:16  */ public class StackTraceElementPractice { public static void main(String[] args) { StackTraceElement[]