<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></title> 
<link>http://jackxiang.com/index.php</link> 
<description><![CDATA[赢在IT，Playin' with IT,Focus on Killer Application,Marketing Meets Technology.]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></copyright>
<item>
<link>http://jackxiang.com/post//</link>
<title><![CDATA[[实践OK]sed给文件行尾加分号和删除一行/删除某行,删除Crontab里的ntpdate,测试如下.]]></title> 
<author>jack &lt;xdy108@126.com&gt;</author>
<category><![CDATA[Php/Js/Shell/Go]]></category>
<pubDate>Mon, 24 Jan 2011 07:26:01 +0000</pubDate> 
<guid>http://jackxiang.com/post//</guid> 
<description>
<![CDATA[ 
	背景：用sed进行删除一行时用@或#均不行，最后还得用斜杠，<br/> sed -i &#039;@^worker_cpu_affinity.*@d&#039;&nbsp;&nbsp;nginx.conf<br/>sed: -e expression #1, char 1: unknown command: `@&#039;<br/>用@符号，即使没有提示啥错误，但实践发现其并没有被替换：<br/>sed -s&nbsp;&nbsp;&quot;s@jenkins@@&quot; /etc/hosts&nbsp;&nbsp;&nbsp;&nbsp;<br/><br/>模糊匹配删一行:<br/>sed -i &quot;/.*bbs.mysql.*/d&quot; /etc/hosts <br/><br/><textarea name="code" class="php" rows="15" cols="100">
(1)测试有没有这一行：
sed -n &#039;s/XjklgMe431**/dfdfd/p&#039;&nbsp;&nbsp;redis6400.conf redis6401.conf
masterauth dfdfd
requirepass dfdfd
masterauth dfdfd
requirepass dfdfd
(2)直接找到就删这一行：
sed -i &#039;/XjklgMe431**//d&#039;&nbsp;&nbsp; redis6400.conf redis6401.conf
</textarea><br/><br/>用斜杠就对了,以行打头进行匹配：<br/><textarea name="code" class="php" rows="15" cols="100">
sed -i &#039;/^worker_cpu_affinity/d&#039;&nbsp;&nbsp;nginx.conf
</textarea><br/><br/>比如删除Nginx里的nginx.conf里的&nbsp;&nbsp;&nbsp;&nbsp;include vhosts/mini.conf，注意：如果有多个可能会删除多行;<br/><textarea name="code" class="php" rows="15" cols="100">
sed -i &#039;/mini.conf/d&#039;&nbsp;&nbsp;nginx.conf
</textarea><br/><br/><br/>用这个检查后加的&#124;&#124; /usr/sbin/ntpdate 10.70.36.233 &amp;&amp; hwclock -w，就行，看看结果<br/>Ansible的crontab模块批量修改：<br/><textarea name="code" class="php" rows="15" cols="100">
- name: 配置 crontab 用于同步服务器系统时间
&nbsp;&nbsp;cron: name=&quot;sync time from ntp server&quot; minute=&quot;40&quot; hour=&quot;4&quot; job=&quot;/usr/sbin/ntpdate 192.168.105.** &#124;&#124; /usr/sbin/ntpdate 10.70.36.*** &amp;&amp; hwclock -w&quot; backup=yes
&nbsp;&nbsp;tags: common_crontab_ntpdate
</textarea><br/>是否修改成功：<br/><textarea name="code" class="php" rows="15" cols="100">
ansible xxx -a &#039;fgrep &quot;192.168.105.**&quot; /var/spool/cron/root&#039;
40 4 * * * /usr/sbin/ntpdate 192.168.105.** &#124;&#124; /usr/sbin/ntpdate 10.70.36.*** &amp;&amp; hwclock -w
</textarea><br/><br/>通过vi的%s/$/;/g 来给一个100M的大文件进行替换，vim赶紧很吃力。<br/>于是通过sed来实现该功能，如下：<br/><div class="code">sed -i &quot;s/$/;/g&quot; sqlcheckout.sql </div><br/>或者删除某文件以某字符开头的行：<br/><br/><div class="code">sed &#039;/^FScoreDetailId/d&#039;&nbsp;&nbsp;sqlcheckoutResultTestResult.txt</div><br/><br/>删除Crontab里的ntpdate,测试如下:<br/><textarea name="code" class="php" rows="15" cols="100">
sed -n &#039;s#^.*&#92;/usr&#92;/sbin&#92;/ntpdate#d#p&#039;&nbsp;&nbsp;/var/spool/cron/root&nbsp;&nbsp;
d 10.70.**.*** &amp;&amp; hwclock -w
d 10.70.**.*** &amp;&amp; hwclock -w
d 192.168.***.**
</textarea><br/><br/>下面这样能删除，但是能留下空行：<br/><textarea name="code" class="php" rows="15" cols="100">
sed -i &#039;s#^.*&#92;/usr&#92;/sbin&#92;/ntpdate.*$##&#039;&nbsp;&nbsp;/var/spool/cron/root&nbsp;&nbsp;
</textarea><br/><br/><br/>#Ansible: sync time from ntp server<br/>40 4 * * * /usr/sbin/ntpdate 192.168.105.** &#124;&#124; /usr/sbin/ntpdate 10.70.36.***<br/>40 4 * * * /usr/sbin/ntpdate 192.168.105.**<br/>删除步骤：<br/>sed -i &#039;s#^.*&#92;/usr&#92;/sbin&#92;/ntpdate.*$##&#039;&nbsp;&nbsp;/var/spool/cron/root<br/><br/>sed -i &#039;/^$/d&#039;&nbsp;&nbsp; /var/spool/cron/root <br/><br/><br/>先修改，再一个一个干掉多余的比较靠谱稳妥：<br/>ansible-playbook common.yml -t common_crontab_ntpdate -e h=jackX<br/>看下有多少个重复的：<br/>ansible itest -a&quot;cat /var/spool/cron/root&#124;grep&nbsp;&nbsp;&#039;ntpdate 10.70.36.***&#039;&quot;<br/><br/><br/>=================================================================<br/>一、sed 中的-i参数说明：直接删除文件里某行或某几行后保存回被删除文件，如下：<br/>sed -i &#039;1d&#039;&nbsp;&nbsp;nginx.conf&nbsp;&nbsp; #直接删除文件第1行,删除结果后保存回被删除文件。<br/>想删除最后几行，可以用tac反序输出文件，删除后面3行， 1-3行：<br/><div class="code"><br/>&nbsp;&nbsp;tac nginx.conf &#124; sed &#039;1,3d&#039;&#124;tac &gt; nginxnew.conf&nbsp;&nbsp;#先按行颠倒一下文件内容，再把这个流给用Sed删除掉前3行，也就是原文件后面三行，然后再颠倒还原回去，再保存回新文件，一定要回新文件，否则原文件变空了。<br/></div><br/>tac :反序输出文件简介。<br/><br/>二、用Sed显示某一行：<br/><div class="code">&#91;root@bogon diff&#93;# sed -n &#039;1p&#039; A.txt&nbsp;&nbsp;&nbsp;&nbsp;</div><br/>111 21<br/>[root@bogon diff]# sed -n &#039;1p&#039; A.txt <br/><br/><br/>三、用sed来修改某一行的方法：<br/>如有文件sedline.txt 内容如下：<br/> jackxiang<br/> lksjkdfs<br/> xiangdong<br/> xdy108<br/><br/>四、用Sed替换之替换某行里的内容？如：第4行有一个xdy108的串，如何用sed来修改这个xdy为jackcom呢？4s:<br/>sed &#039;4s/xdy/jackcom/&#039; sedline.txt &gt; sendlinemodified.txt<br/>或者直接对该文件做修改：<br/>sed&nbsp;&nbsp;-i &#039;4s/xdy/jackcom/&#039; sedline.txt&nbsp;&nbsp;<br/>-i： 直接将修改这个sedline.txt文件。<br/>模拟替换：-n p参数，这样不会真替换，而是将替换部分显示出来，很是方便测试:<br/>sed&nbsp;&nbsp;-n &#039;s/xdy/jackcom/p&#039; sedline.txt&nbsp;&nbsp;<br/><br/>在某行后插入一行：下面是在第二行后插入SOME_CONTENT_Behind_3rdLine ，并回写回文件中，用到 -i就是这个意思。<br/>sed -i &#039;2 a SOME_CONTENT_Behind_3rdLine&#039; sedline.txt<br/><br/>补充：<br/>在b.txt的第2行之前插入“xxx”<br/>&nbsp;&nbsp;&nbsp;&nbsp;sed &#039;2 i/xxx&#039; b.txt<br/>在b.txt的第2行之后插入“xxx”<br/>&nbsp;&nbsp;&nbsp;&nbsp;sed &#039;2 a/xxx&#039; b.txt<br/>在b.txt的第2行和第3行之后插入“xxx”<br/>&nbsp;&nbsp;&nbsp;&nbsp;sed &#039;2,3 a/xxx&#039; b.txt<br/>在b.txt的第2行和第3行之前插入“xxx”<br/>&nbsp;&nbsp;&nbsp;&nbsp;sed &#039;2,3 i/xxx&#039; b.txt<br/>在b.txt的第2行至最后一行之前插入“xxx”<br/>&nbsp;&nbsp;&nbsp;&nbsp;sed &#039;2,$ i/xxx&#039; b.txt<br/>总结<br/>&nbsp;&nbsp;&nbsp;&nbsp;在指定行之前插入使用的是“i”，而在指定行之后插入是使用“a”
]]>
</description>
</item><item>
<link>http://jackxiang.com/post//#blogcomment</link>
<title><![CDATA[[评论] [实践OK]sed给文件行尾加分号和删除一行/删除某行,删除Crontab里的ntpdate,测试如下.]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>http://jackxiang.com/post//#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>