linux编写定时任务

linux中定时任务用来执行一些周期性的自动化的任务,比如有些人可能用来定期备份,也可能是定期检查一下特殊文件的签名,如果不一致,就报警,检测入侵。 cron是linux下的定时执行工具 这个工具的几个命令是这样的 /sbin/service crond start //启动服务 /sbin/service crond stop //关闭服务 /sbin/service crond restart //重启服务 /sbin/service crond reload //重新载入配置 注意,这几个服务都是要以root权限才能运行的,很多时候,只要我们可能只是一个低权限的用户,那么我们要执行一些定时任务的时候,可以这样做 直接通过这个命令来编辑,无需root用户 crontab 首先添加定时任务 crontab -e 打开之后按如下的格式编写 */1 * * * * ls >> /tmp/ls.txt 从左到右一次表示 分钟 一小时的第几分 0-59 小时 一天的第几小时 0-23 日期 一个月的的第几天 1-31 月份 一年的第几个月 1-12 周几 一周的第几天 0-6 /1表示每一天 /2表示每两天,直接*的话就表示每天/每小时这样 写完之后,wq保存退出 然后 crontab -l //列出当前的所有调度任务 可以看到自己的定时任务了,然后就不要做什么操作了,操作系统定时会读取配置的,编辑完成之后,我们的定时任务过一会就会生效了。 有时候,可能还要把结果信息和一些错误信息也写入 30 5 * * * ls >>/result/test 2>&1 注:2>&1 表示执行结果及错误信息。 这里就是说明天的5点50执行一次ls命令,并把结果追加到文件 如果我想每天5点30和17点30都执行一次呢,使用逗号隔开就行了 30 5,17 * * * ls >>/result/test 2>&1 如果是某个时间段呢 30 5-17 * * * ls >>/result/test 2>&1 这样5-17点钟的每个30分到会执行 如果是一些特殊的时间点,那么有更简单的方法,比如每月0点或者每天0点执行一次 @monthly ls >>/result/test 2>&1 @daily ls >>/result/test 2>&1 使用如上的关键字

2014-03-29 · 1 min · bystander

linux的CPU负载均值

当运行在Linux上的程序有问题之后,我们通常要看一下当前CPU和内存的使用情况来分析一下问题 对于CPU的使用率,通常用Load Average,也就是负载均值来度量 负载均值是啥? 负载是啥,负载就是对CPU使用率的一个计量,均值就是某一段时间内的一个平均值。 怎么看啊? 直接输入w命令 # w 20:02:51 up 23 days, 8:10, 2 users, load average: 1.20, 1.28, 1.29 第一位1.20:表示最近1分钟平均负载 第二位1.28:表示最近5分钟平均负载 第三位1.29:表示最近15分钟平均负载 或者uptime命令 $ uptime 09:50:21 up 200 days, 15:07, 1 user, load average: 0.27, 0.33, 0.37 我们一般认为0.00表示无负载,可以理解为CPU空闲,1.00表示CPU满负载,但是注意,1.00是对于单cpu来说的,也就是说,如果是双核,那么这个满负载显示的值应该是2.00,以此类推。 怎么看我是几核啊 grep 'model name' /proc/cpuinfo | wc -l 通过统计cpuinfo的model name信息来算的 这三个值哪个重要? 一分钟内突然负载很大没关系,当然如果你要排查也没人拦着,如果15分钟的负载均值超过cpu的数目,就要关注了。 那什么就是理想负载呢? 以单个cpu为例,1.00表示cpu满负载运行,没有一点点浪费,实际上,有些管理员认为0.7也许是理想的状态。如果你的经常超过0.7,那么最好查一查。

2014-03-08 · 1 min · bystander

[笔记]写代码遇到的一些问题汇总下

本篇是用来填上一篇 挖下的坑的。 1.java调用webservice 有一些已有的webservice服务,由xfire生成发布,有些有参数,有些无参数,无参数的直接我直接使用org.codehaus.xfire这个包里的Client来动态生成客户端。然后调用就可以了。非常简单 Client client = null; try { client = new Client( new URL( "http://leaver.me/testService?wsdl")); client.invoke("refreshAllCache", new Object[0]); } catch (MalformedURLException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } 但对于有参的,且是服务器自定义的类作为参数的时候,实在是搞不定。。不管是把自定义的类放到本地,包名一致,在invoke的时候生成这个对象还是其他什么方法。都无法完成。 最终换了直接发送soap报文来完成。dirty hack啊。如果你有一些好的方法希望不吝赐教。 解决方案来源自stackoverflow,因为stackoverflow现在国内好像有时候打不开。因此把代码贴过来。有疑问的话留言讨论。 import javax.xml.soap.*; import javax.xml.transform.*; import javax.xml.transform.stream.*; public class SOAPClientSAAJ { /** * Starting point for the SAAJ - SOAP Client Testing */ public static void main(String args[]) { try { // Create SOAP Connection SOAPConnectionFactory soapConnectionFactory = SOAPConnectionFactory.newInstance(); SOAPConnection soapConnection = soapConnectionFactory.createConnection(); // Send SOAP Message to SOAP Server String url = "http://ws.cdyne.com/emailverify/Emailvernotestemail.asmx"; SOAPMessage soapResponse = soapConnection.call(createSOAPRequest(), url); // Process the SOAP Response printSOAPResponse(soapResponse); soapConnection.close(); } catch (Exception e) { System.err.println("Error occurred while sending SOAP Request to Server"); e.printStackTrace(); } } private static SOAPMessage createSOAPRequest() throws Exception { MessageFactory messageFactory = MessageFactory.newInstance(); SOAPMessage soapMessage = messageFactory.createMessage(); SOAPPart soapPart = soapMessage.getSOAPPart(); String serverURI = "http://ws.cdyne.com/"; // SOAP Envelope SOAPEnvelope envelope = soapPart.getEnvelope(); envelope.addNamespaceDeclaration("example", serverURI); /* Constructed SOAP Request Message: <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:example="http://ws.cdyne.com/"> <SOAP-ENV:Header/> <SOAP-ENV:Body> <example:VerifyEmail> <example:email>[email protected]</example:email> <example:LicenseKey>123</example:LicenseKey> </example:VerifyEmail> </SOAP-ENV:Body> </SOAP-ENV:Envelope> */ // SOAP Body SOAPBody soapBody = envelope.getBody(); SOAPElement soapBodyElem = soapBody.addChildElement("VerifyEmail", "example"); SOAPElement soapBodyElem1 = soapBodyElem.addChildElement("email", "example"); soapBodyElem1.addTextNode("[email protected]"); SOAPElement soapBodyElem2 = soapBodyElem.addChildElement("LicenseKey", "example"); soapBodyElem2.addTextNode("123"); MimeHeaders headers = soapMessage.getMimeHeaders(); headers.addHeader("SOAPAction", serverURI + "VerifyEmail"); soapMessage.saveChanges(); /* Print the request message */ System.out.print("Request SOAP Message = "); soapMessage.writeTo(System.out); System.out.println(); return soapMessage; } /** * Method used to print the SOAP Response */ private static void printSOAPResponse(SOAPMessage soapResponse) throws Exception { TransformerFactory transformerFactory = TransformerFactory.newInstance(); Transformer transformer = transformerFactory.newTransformer(); Source sourceContent = soapResponse.getSOAPPart().getContent(); System.out.print("\nResponse SOAP Message = "); StreamResult result = new StreamResult(System.out); transformer.transform(sourceContent, result); } } 2.Access restriction on class due to restriction on required library rt.jar? 报错 ...

2014-02-08 · 4 min · bystander

Unix sed实用教程系列目录

本系列文章已经译完了,译自awk-sed@theunixschool,收获颇丰,作者没有将明白的我做了补充,并且尝试讲的更清楚,整理成系列索引,方便学习,开篇非译文,是我为了方便后面的理解写的一篇,感谢原作者的分享.有任何问题欢迎留言讨论. Unix sed实用教程开篇 [译]Unix sed实用教程第一篇–向文件中增加一行 [译]Unix sed实用教程第二篇–替换文件内容 [译]Unix sed实用教程第三篇–读写文件 [译]Unix sed实用教程第四篇–选择性打印 [译]Unix sed实用教程第五篇–替换文件内容续 [译]Unix sed实用教程第六篇–删除文件内容 [译]Unix sed实用教程第七篇–输出文件内容(10 Demo) [译]Unix sed实用教程第八篇–CSV文件操作

2013-08-11 · 1 min · bystander

[译]Unix sed实用教程第八篇–CSV文件操作

本文作为sed使用教程的最后一篇,将比较全面的讲解如何操作csv文件,csv文件通过逗号分隔 示例文件如下: cat file Solaris,25,11 Ubuntu,31,2 Fedora,21,3 LinuxMint,45,4 RedHat,12,5 1.删除第一列 $ sed 's/[^,]*,//' file 25,11 31,2 21,3 45,4 12,5 s开启替换模式,当^符号在中括号里的时候,就是非的意思,也就是说[^,]匹配了所有不是逗号的一个字符,然后后面的星号表示0个或多个,然后是一个逗号,也就是匹配"xxxx,“替换为空 2.删除除过最后一列的其他所有 $ sed 's/.*,//' file 11 2 3 4 5 sed先匹配任意多个字符,然后匹配最后一个“,”这就直接把前面的都匹配完了。替换为空即可。 3.输出第一列 $ sed 's/,.*//' file Solaris Ubuntu Fedora LinuxMint RedHat 好理解把,先匹配第一列之后的逗号,然后是多个字符,然后替换为空 4.删除第二列 $ sed 's/,[^,]*,/,/' file Solaris,11 Ubuntu,2 Fedora,3 LinuxMint,4 RedHat,5 先匹配第一列之后的逗号,然后匹配一个或多个非逗号字符,这样就匹配了第二列的内容,然后再匹配一个逗号,我简化一下,比如该列是1,2,3,4,那么这一个匹配就是”,2,",替换成一个逗号,就是1,3,4了 5.输出第二列 $ sed 's/[^,]*,\([^,]*\).*/\1/' file 25 31 21 45 12 我们可以分析前两个斜线之间的内容 [^,]*,\([^,]*\).* 两个右斜线转移了括号,所以括号不是简单的符号,而是正则里的组的意义,圆括号的作用是对字符进行分组,并保存匹配的文本。这里先匹配非逗号的多个字符,然后一个逗号,然后再匹配第二列,并且第二列的匹配用括号括起来,然后匹配其他列,然后里面用\1来引用这个括号的内容,如果前面有两个括号,就可以使用\1或\2这样,分别表示第一个括号或第二个括号的匹配 6.输出最后一列是一位数字的行 $ sed -n '/.*,[0-9]$/p' file Ubuntu,31,2 Fedora,21,3 LinuxMint,45,4 RedHat,12,5 .*匹配了前面的所有字符,然后,匹配了最后一个逗号,sed的贪婪原则。。然后[0-9]匹配一个数字$表示行尾.ok 7.给每一行自动添加行号 $ sed = file | sed 'N;s/\n/ /' 1 Solaris,25,11 2 Ubuntu,31,2 3 Fedora,21,3 4 LinuxMint,45,4 5 RedHat,12,5 这个和cat -n file的效果是一样的。awk也可以很简单的做,这里使用一个=命令会在每一行之前添加一个行号,也就是是,如果执行 sed = file 文件会是: 1 Solaris,25,11 2 Ubuntu,31,2 3 Fedora,21,3 4 LinuxMint,45,4 5 RedHat,12,5 然后我们通过管道再执行 sed 'N;s/\n/ /' N表示读入并合并下一行,然后将两行之间的换行符替换为空即可了 8.如果第一列是Ubuntu,就把最后一列替换成99 $ sed 's/\(Ubuntu\)\(,.*,\).*/\1\299/' file Solaris,25,11 Ubuntu,31,99 Fedora,21,3 LinuxMint,45,4 RedHat,12,5 中间的 \(Ubuntu\)\(,.*,\).* 匹配“Ubuntu,任意个字符,任意个字符”,也就是将行分成几组,将本行替换成第一组的内容第一组的内容,第二组的内容,但最后的一列被替换成99,就这样。 9.如果第一列是RedHat就删除第二列 ...

2013-08-11 · 1 min · bystander

[译]Unix sed实用教程第七篇–输出文件内容(10 Demo)

之前已经学习过选择性打印输出了,本文将通过10个例子全面讲解文件输出的一些方法,主打p命令 首先看一下将使用的示例文件 $ cat file AIX Solaris Unix Linux HPUX 1.打印文件首行 $ sed -n '1p' file AIX 之前讲过了,-n取消默认的全部打印,p表示print,1就是行号了 2.输出最后一行 $ sed -n '$p' file HPUX 3.输出不匹配X的那些行 $ sed -n '/X/!p' file Solaris Unix Linux 也好理解,!表示非,就是说包含X匹配的不打印输出 4.输出包含u/x的那些行 $ sed -n '/[ux]/p' file Unix Linux 正则是强大的,这样就匹配了u/x 5.输出以x/X结尾的那些行 $ sed -n '/[xX]$/p' file AIX Unix Linux HPUX 这里$符号不再是匹配文件尾部,而是行尾,这是正则的规则 6.输出以A/L开头的行 $ sed -n '/^A\|^L/p' file AIX Linux 前面也说过,^匹配了行首,A表示A匹配,然而|则是或者的意思,为什么要加\转义,是为了避免被解析成pipe管道,后面的就不解释了 7.隔行打印 n命令是输出当前行,然后读入下一行到pattern space的意思,这句命令是这么执行的,首先读入一行,然后通过n命令输出,然后通过n命令再读一行,然后把这行删除,就出现了隔行输出的效果 8.如何两行输出,隔两行再输出 $ sed 'n;n;N;d' file AIX Solaris HPUX n;n; 命令呢输出了前两行,然后读入第三行到pattern space,N命令则对如下一行并与第三行合并,然后d命令删除pattern space中的内容,于是三四行被清空,然后读入56行,继续重复。就这样。作者这里给出的例子不直观,我举个例子,我的文件内容是 $ cat test.txt 1 2 3 4 5 6 7 8 9 执行上面的命令后,会输出 1 2 5 6 9 明白了吧 9.输出某个范围行内以X结果的那些行 $ sed -n '/Unix/,${/X$/p;}' file HPUX 这里首先制定了从/Unix/匹配开始到文件尾部的这些行,然后呢,在这些之间的行,如果以X结果,就输出。 10.输出不包括开始和结尾的那些行 $ sed -n '/Solaris/,/HPUX/{//!p;}' file Unix Linux 这个命令就会只输出/Solaris/和/HPUX/之间的行,不包括他们两个。 这里要说一下//这个,当匹配了Solaris的时候就进入了花括号,因为这个里面没有提供任何匹配,所以就考虑最后一次匹配模式,也就是相当于是考虑Solaris这一行,他不被打印,当到了HPUX这一匹配,//又代表了HPUX匹配,这一行也不打印。 Demo完了,你懂了么。

2013-08-11 · 1 min · bystander

[译]Unix sed实用教程第六篇–删除文件内容

其实,删除和替换是由一些相同的,不过,这里我们单独列出来,通过25个例子穿插讲解sed删除文件的一些方法,使用的示例文件如下: $ cat file Cygwin Unix Linux Solaris AIX 1.删除第一行 $ sed '1d' file Unix Linux Solaris AIX d就是删除,1就是指第1行,记得哦,这不会影响到源文件,一般,做删除的时候一般要加-i参数,前面说过了 sed -i '1d' file 2.删除指定行,这里删除第3行 $ sed '3d' file Cygwin Unix Solaris AIX 3.删除最后一行 $ sed '$d' file Cygwin Unix Linux Solaris 4.删除范围行,这里删除2-4行 $ sed '2,4d' file Cygwin AIX 5.保留指定的行,这里保留2-4行 $ sed '2,4!d' file Unix Linux Solaris !这个是对前面的2,4来操作,是非的意思,也就是不是2-4行的行,这样除去2-4行,其他的都删除了 6.删除第一行和最后一行 $ sed '1d;$d' file Unix Linux Solaris 分号隔开两个命令,你懂的,也可以删除第二行和第三行等等. ‘2d;3d’ 7.删除以指定字符开头的行 $ sed '/^L/d' file Cygwin Unix Solaris AIX 这里就把以L开头的Linux这一行删除了 8.删除以指定字符结尾的行 $ sed '/x$/d' file Cygwin Solaris AIX 这里就删除了,可以看到AIX没有删除,unix区分大小写你懂的 9.忽略大小写,都删除 $ sed '/[xX]$/d' file Cygwin Solaris [xX]匹配x或X,所以就成功了嘛 10.删除文件中的空行 $ sed '/^$/d' file Cygwin Unix Linux Solaris AIX ^匹配开头,$匹配结果,中间啥都没有,这样就匹配了空行,但是注意哦,如果某一行全是空格,这个命令是不会删除这一行的。 11.删除空行或是仅仅包含空格的行 $ sed '/^ *$/d' file Cygwin Unix Linux Solaris AIX 如果你看我前面的文章,这个就不用我说了吧,0个或多个空格就是匹配了所有的空行了 12.删除完全是大写字母的行 $ sed '/^[A-Z]*$/d' file Cygwin Unix Linux Solaris [A-Z]就匹配了26个大写字母的任意一个 13.删除包含Unix匹配的行 ...

2013-08-10 · 2 min · bystander

[译]Unix sed实用教程第五篇–替换文件内容续

前面已经学习过替换文件内容了,本文我们学习一些更频繁使用的搜索替换操作. 示例文件使用: $ cat file RE01:EMP1:25:2500 RE02:EMP2:26:2650 RE03:EMP3:24:3500 RE04:EMP4:27:2900 1.替换每行开始的两个字母,这里用XX来替换 $ sed 's/^../XX/' file XX01:EMP1:25:2500 XX02:EMP2:26:2650 XX03:EMP3:24:3500 XX04:EMP4:27:2900 s代表substitute,前面说过了,^用来匹配行开头,.表示任意一个字符,两个..就是你懂的, 其实,不要^符号也是可以的,因为默认就是从开头开始匹配,如下也可以实现 sed 's/../XX/' file 2.删除每行开头的两个字符 $ sed 's/^..//' file 01:EMP1:25:2500 02:EMP2:26:2650 03:EMP3:24:3500 04:EMP4:27:2900 看到没有,后两个斜线之间没有内容,也就是用空字符来替换开头的两个字符,就实现了删除 3.要是想删除每行最后的两个字符呢 $ sed 's/..$//' file RE01:EMP1:25:25 RE02:EMP2:26:26 RE03:EMP3:24:35 RE04:EMP4:27:29 再次强调,$在不同的情况下表示不同的意思,这里匹配行尾,有时候也匹配文件尾部 4.向每行末尾添加内容 $ sed 's/$/.Rs/' file RE01:EMP1:25:2500.Rs RE02:EMP2:26:2650.Rs RE03:EMP3:24:3500.Rs RE04:EMP4:27:2900.Rs 这里,先匹配行尾,然后把".Rs"添加到行尾 5.在每行开头添加空格 $ sed 's/^/ /' file RE01:EMP1:25:Rs.2500 RE02:EMP2:26:Rs.2650 RE03:EMP3:24:Rs.3500 RE04:EMP4:27:Rs.2900 还记得前面说过的么,sed默认不影响原始文件,要是想更新原始文件,请加-i参数 $ sed -i 's/^/ /' file $ cat file RE01:EMP1:25:Rs.2500 RE02:EMP2:26:Rs.2650 RE03:EMP3:24:Rs.3500 RE04:EMP4:27:Rs.2900 6.移除开始的空格 $ sed 's/^ *//' file RE01:EMP1:25:2500 RE02:EMP2:26:2650 RE03:EMP3:24:3500 RE04:EMP4:27:2900 ^匹配行首,然后是一个空格,然后是*,表示一个或多个空格嘛,然后替换为空字符 7.移除行首和行尾的空格 $ sed 's/^ *//; s/ *$//' file RE01:EMP1:25:2500 RE02:EMP2:26:2650 RE03:EMP3:24:3500 RE04:EMP4:27:2900 不要怕,从分号处分开,就是两条命令啦,一个做行首的,一个做行尾的,前面说过的,可以使用-e参数来分开 sed -e 's/^ *//' -e 's/ *$//' file 8.如何在一个字符串前后添加一些其他字符呢,可以用来字符串转义 $ sed 's/.*/"&"/' file "RE01:EMP1:25:Rs.2500" "RE02:EMP2:26:Rs.2650" "RE03:EMP3:24:Rs.3500" "RE04:EMP4:27:Rs.2900" 前两个斜线匹配了所有字符,也就是本行,然后后面两个斜线是替换的内容,注意里面的&符号,之前也说过的,表示匹配到的字符,也就是本行了。所有就这样啦 9.移除行首和行尾的一个字符(多个你也会的啦) $ sed 's/^.//;s/.$//' file RE01:EMP1:25:2500 RE02:EMP2:26:2650 RE03:EMP3:24:3500 RE04:EMP4:27:2900 分开看看,你可以的 10.删除第一个数字之前的所有字符 ...

2013-08-10 · 1 min · bystander

[译]Unix sed实用教程第四篇–选择性打印

本文,我们将会学习如何选择性的打印(其实,这里的打印是print,也就是输出到标准输出的意思),用到的示例文件是: $ cat file Gmail 10 Yahoo 20 Redif 18 1.打印所有内容 $ sed '' file Gmail 10 Yahoo 20 Redif 18 一对单引号,没有任何参数即可 2.如何打印包含Gmail的那一行.(grep也可以实现这个功能) $ sed '/Gmail/p' file Gmail 10 Gmail 10 Yahoo 20 Redif 18 在斜线里面,我们指定正则匹配模式,p的意思呢,就是print,打印的意思,也就是打印包含Gmail这一行,但是我们看到Gmail打印了两次,为什么,因为sed的默认行为是在解析完一行之后就把他输出出来,也就是对于Gmail这一行,先执行p解析,解析完成后再默认打印一次,就打印了两次,而其他的,没有命令解析,直接读入完成后输出即可。 如果得到期望的结果呢? $ sed -n '/Gmail/p' file Gmail 10 -n参数会取消sed的默认打印行为,所以就ok了 3.删除包含Gmail的那一行。(grep -v也有同样的效果) $ sed '/Gmail/d' file Yahoo 20 Redif 18 d就是delete的意思,不多解释, 同样,要想删除某一指定的行 $ sed '1d' file Yahoo 20 Redif 18 4.打印直到模式匹配,这里我们从头一直打印到Yahoo $ sed '/Yahoo/q' file Gmail 10 Yahoo 20 q就是quit的意思,这条命令就是对于前面的行都没啥可解析的,执行默认的打印即可,一到碰到Yahoo这一行,打印完成,就停止,退出,因此,就是上面的了 打印某一指定范围行 到此,我们一直在学习基于一个条件取一行或多行,现在,我们来学习打印指定范围行 使用的示例文件如下: $ cat file Gmail 10 Yahoo 20 Redif 18 Inbox 15 Live 23 Hotml 09 5.打印前三行 $ sed -n '1,3p' file Gmail 10 Yahoo 20 Redif 18 -n先取消默认打印,然后1,3指定行范围,p表示打印,你想一下我们前面的q命令,就知道下面这个命令效果是一样的 $ sed '3q' file Gmail 10 Yahoo 20 Redif 18 执行默认打印,到第三行的时候退出 6.通过模式指定范围,这里我打印从Yahoo到Live之间的行,包括本身 $ sed -n '/Yahoo/,/Live/p' file Yahoo 20 Redif 18 Inbox 15 Live 23 不用多解释了 7.从指定模式到文件尾部,这里是从Redif到文件尾 ...

2013-08-10 · 1 min · bystander

[译]Unix sed实用教程第三篇–读写文件

本文将展示如何将文件内容读入到sed输出,同时包含如何将一个文件的部分内容写入到另一文件 一.文件读取 假定有两个文件,file1和file2,内容分别如下: $ cat file1 1apple 1banana 1mango $ cat file2 2orange 2strawberry sed有两个选项用来读写文件 r filename : 读取filename指定的文件内容 w filename : 将内容写入filename指定的文件 看例子: 1.在file1的每一行读完之后读取file2的内容 $ sed 'r file2' file1 1apple 2orange 2strawberry 1banana 2orange 2strawberry 1mango 2orange 2strawberry r file2读取file2的所有内容,因此r之前没有知道那个行号或匹配,因此有了上面的输出,记住,sed的工作机制,每次读file1的一行,然后执行命令 2.如何在读取了file1的第一行之后将file2读入 $ sed '1r file2' file1 1apple 2orange 2strawberry 1banana 1mango r前面加个1就行了 3.当file1某行匹配了模式之后,读入file2 $ sed '/banana/r file2' file1 1apple 1banana 2orange 2strawberry 1mango sed逐行读入file1,然后判断该行是否匹配banana,如果匹配,就读入file2 4.当file1读取完成后读入file2,其实就是合并两个文件 $ sed '$r file2' file1 1apple 1banana 1mango 2orange 2strawberry 这里只是演示一下,其实cat file1 file2就可以完成合并 二.文件写入 使用一个file1文件,内容如下: $ cat file1 apple banana mango orange strawberry 1.将file1的2-4行写入到file2 $ sed -n '2,4w file2' file1 2,4w就是写2-4行的意思,那-n呢?默认情况下sed会把读入的文件处理的结果输出到标准输出,也就是终端,而为了不使用默认输出,-n就派上用场了,执行该命令终端不会有任何输出 $ cat file2 banana mango orange 查看file2内容,发现已经写入成功了 2.从第三行开始全部写入file2 $ sed -n '3,$w file2' file1 $ cat file2 mango orange strawberry 就不多解释了 3.如果是用正则呢? $ sed -n '/apple/,/mango/w file2' file1 $ cat file2 apple banana mango 该命令将逐行读入file1,然后判断该行是否匹配apple,如果匹配,则作为起始行,然后继续读入,判断是否匹配mango,如果是,则作为终止行,然后将中间的内容写入到file2 ...

2013-08-09 · 1 min · bystander