2007年6月5日星期二

sed 命令简介 - 命令





sed 命令简介 - 命令

1. sed 命令简介

Sed(a stream editor)是流线型、非交互式编辑器。它允许你执行与vi编辑器里一样的编辑任务。Sed 程序不是与编辑器交互式工作的,而是让你在命令行里敲入编辑的命令,给文件命名,然后在屏幕上查看命令输出结果。

2. sed 如何工作

sed 编辑器按一次处理一行的方式来处理文件,并把输出送到屏幕上。

3. sed 可以用寻址的方式来决定想要编辑哪一行。

4. sed 命令和选项

选项 功能

a\ 在当前行上添加一个文本行或者多个文本行

c\ 用新闻本改变(取代)当前行里的文本

d 删除行

i\ 在当前行之前插入文本

h 把模式空间内容复制到一个固定缓存

H 把模式空间内容添加到一个固定缓存

g 得到固定缓存里所有的并复制到模式缓存,重写其内容

G 得到固定缓存的内容并复制到模式缓存,添加到里面

I 列出不打印的字符

p 打印行

n 读下一输入行,并开始用下一个命令处理换行符,而不是用第一个命令

q 结束或退出sed

r 从一个文件读如行

! 把命令应用到除了选出的行以外的其他所有行

s 把一个字串替换成另一个替换标志

g 在一行上进行全局替换

p 打印行

w 把行写到一个文件中

x 用模式空间的内容交换固定缓存的内容

y 把一个字符转换成另一个(不能和整则表达式元字符一起使用)


5、 sed元字符

基本上,grep和vi使用的元字符都可以用在sed中,&是特例:

& :保存搜索串以便可以记在替换串里

e.g.: s/love/**&**/

&号代表搜索串。串love将被星号包围的自身所替代;即love变成**love**


6 sed实例

1> 打印:p命令

sed '/north/p' datafile

默认输出所有行,找到north的行重复打印

sed –n '/north/p' datafile

禁止默认输出,只打印找到north的行

2> 删除:d命令

sed '3d' datafile

删除第三行,其余行输出到屏幕

sed '3,$d' datafile

从第3行到最后一行都删除,将剩余部分输出到屏幕

sed '/north/d' datafile

将含有north的行删除,其余输出到屏幕

3> 替换:s命令

sed 's/west/north/g' datafile

解释:找到datafile中的所有west并替换成north,将替换后的内容输出到屏幕。

sed 's/[0-9][0-9]$/&.5/' datafile

解释:在替代串里的&字符代表在搜索串中真正找到的。

每个以两个数字结尾的行都被它自己取代,且要在后面加上.5

sed -n 's/Hemenway/Jones/gp' datafile

解释:所有的Hemenway所在的位置都用Jones来取代,而且只有改变的行被打印。

-n与p命令选项相结合来禁止默认输出。g代表全局替换

sed -n 's/\(Mar\)got/\1ianne/p' datafile

解释:模式Mar被封装在括弧里且在一个专用寄存器里存为标记1。

在替换串里它将被引用做\1。然后用Marianne替代Margot。

sed 's#3#88#g' datafile

解释:s命令后面的字符是搜索串和替换串之间的分界符。

默认的分界符是一个正斜杠,但也可以改变(只有使用s命令时)。

无论s命令后面跟什么字符,它都是新的串分界符。

当搜索包含一个正斜杠的模式,如路径或生日时,这种技巧可能有用

4> 被选中的行的范围:逗号

sed -n '/west/,/east/p' datafile

打印在west和east之间的模式范围内所有行。如果west出现在east之后,

则打印从west到下一个east或者到文件末尾的行,无论哪种情况先出现都可以。

sed '/west/,/east/s/$/**VACA**/' datafile

解释:对于在模式west到east范围内的行,行末尾将用**VACA**来取代。

5> 多次编辑 -e 选项

sed -e '1,3d' -e 's/Hemenway/Jones/' datafile

-e选项允许多次编辑。不同的编辑顺序可能导致不同的结果。

例如,如果两个命令都执行了替换,第一次替换可能影响第二次替换。

6> 从文件中读取:r命令

sed '/Suan/r newfile' datafile

解释:r命令从newfile中读取内容,将内容输出到Suan的后面。

如果datafile中Suan出现的次数不只一次,则分别放到Suan的后面。

7> 写入文件:w命令

sed -n '/north/w newfile' datafile

解释:w命令把指定的行写入到一个文件。

本例中所有的包含north的行写入到newfile中。

等同于sed -n '/north/p' datafile >newfile

8> 添加:a命令

$ sed '/north/a\

> ---->THE NORTH SALES DISTRICT HAS MOVED<-----' datafile


northwest NW Charles Main 3.0 .98 3 34

---->THE NORTH SALES DISTRICT HAS MOVED<-----

解释:红颜色的内容是要输入的内容。a\命令后面跟要添加的内容。

奇怪的是a\后面必须另起一行,在输入要添加的内容,否则会提示解析错误。

9> 插入:i命令

$ sed '/north/i\

> ---->THE NORTH SALES DISTRICT HAS MOVED<-----' datafile


---->THE NORTH SALES DISTRICT HAS MOVED<-----

northwest NW Charles Main 3.0 .98 3 34


解释:在符合模式的行前面插入内容。其余和a\命令相同。


10>下一个:n命令

$ sed '/eastern/{n;s/AM/Archie/;}' datafile



eastern EA TB Savage 4.4 .84 5 20

northeast NE Archie Main Jr. 5.1 .94 3 13

……

解释:如果在某一行里模式eastern被匹配,n命令使sed区的下一行,

用该行代换模式空间,用Archie替换AM,打印并继续。


11>变换:y 命令

sed '1,3y/abcdefghijklmnopqrst/ABCDEFGHIJKLMNOPQRST/' datafile

解释:将对应字母进行转换。

12>退出:q 命令

sed '5q' datafile

解释:在打印了5行之后,用q命令退出sed程序。

13>保存和取得:h和G命令

$ sed -e '/southeast/h' -e '$G' datafile

解释:当sed 处理文件时,每行都存在模式空间(pattern space)的临时缓存中。除非行被禁止打印或删除,否则行将在处理完后被打印到屏幕,然后请模式空间并把下一输入行保存在那里等待处理。在这个例子中,在找到模式之后,把它放在模式空间里,而且h命令复制它并把它存到另一个叫做保存缓存(holding buffer)中。第二个sed指令里,当读入最后一行($)时,G命令告诉sed从包存缓存中取得该行并放回模式空间缓存,添加到当前存在那里的行中。本例子就是最后一行。

$ sed -e '/WE/{h;d;}' -e '/CT/G' datafile

解释:第一个命令h将找到了WE的行放到保存缓存中,然后删除该行;第二个命令/CT/G就是在找到了CT的行的后面加入保存缓存的内容。



14>G和g的区别

G命令在符合的条件行后面添加保存缓存中的内容;g命令用保存缓存中

15>sed 命令的花括号{}的作用

花括号{}中可以放入多个命令,每个命令后面要用分号;。

16>保存和交换:h 和 x命令。

$ sed -e '/Patricia/h' -e '/Margot/x' datafile

解释:x命令将找到的行用保存缓存中的内容替换。

7. 用sed来编写命令表

sed 命令表(script)是文件里的一个sed命令列表。用-f选项来引用一个命令表文件。编辑sed命令表有特殊要求:命令末尾不能有任何尾随的空白符或者文本。如果命令不是自成一行,就必须用分号结束。

2007年6月4日星期一

改变linux 刷新率





改变linux 刷新率 - 红联Linux门户-做最出色的Linux技术社区网站 - 信息资讯 - Linux - Linux安装指导

直接编辑/etc/X11/XF86Config(-4)或者/etc/X11/xorg.conf(FC2):

Section "Monitor"
Identifier "Monitor0"
VendorName "Monitor Vendor"
ModelName "775FT Plus"
DisplaySize 330 250 #这是17"显示器的数值,一般保留原来的值就行
HorizSync 30.0 - 71.0
VertRefresh 50.0 - 160.0 #根据自己的显示器改,新显示器到85没问题的,不过不要太贪
Option "dpms"
EndSection

Section "Screen"
Identifier "Screen0"
Device "Videocard0"
Monitor "Monitor0"
DefaultDepth 16
SubSection "Display"
Viewport 0 0
Depth 16
Modes "1024x768" "800x600" "640x480" #1024x768在前面就是默认
EndSubSection
EndSection

Debian 鼠标滚轮配置

修改/etc/X11/xorg.conf,主要两点:
一是将Protocol改为“ImPS/2”
二是添加Option "ZAxisMapping" "4 5",这一行的含义是将滚轮上滚动作映射为鼠标第4键,将滚轮下滚动作映射为鼠标第5键。

Section "InputDevice"
Identifier "Configured Mouse"
Driver "mouse"
Option "CorePointer"
Option "Device" "/dev/psaux"
Option "Protocol" "ImPS/2"
Option "Emulate3Buttons" "true"
Option "ZAxisMapping" "4 5"
EndSection

mutt 文本界面的邮件客户端

主页: http://www.mutt.org/

简介: mutt是一个文本界面的邮件客户端,性能比较强,支持pop和smtp以及更多的特性。

安装:建议用源码包安装,当然在mutt的主页上也有发行版的打包。

源码包通用安装方法:举例:比如我们安装mutt的开发版 mutt-1.5.9i.tar.gz,您可以在mutt.org 上得到:

[root@S01soft]#tar zxvf mutt-1.5.9i.tar.gz
[root@S01soft]#cd mutt-1.5.9
[root@S01mutt-1.5.9]#./configure --enable-pop --enable-imap --enable-flock --enable-mailtool
如果您想获得更多的特性,请用./configure --help 查看
[root@S01mutt-1.5.9]#make
[root@S01mutt-1.5.9]#make install

注:mutt的配置文件被安装到 /usr/local/etc/ ,文件名是 Muttrc


配置:

您可以把 Muttrc 复到制 /etc/ 目录
[root@S01mutt-1.5.9]#cp /usr/local/etc/Muttrc /etc/

对于每个用户的mutt的配置,是在用户家目录的 .muttrc 文件,您可以把 Muttrc 复到到自己的家目录中,并重命名为.muttrc 。然后对.muttrc 根据自己的邮箱进行配置。

[beinan@S01soft]$cd ~
[beinan@S01~]$cp /etc/Muttrc .muttrc
[beinan@S01~]$

这样后,我们就可以对.muttrc 进行配置了。你用自己喜可欢的编辑工具来做,比如 vi ;nano 以及leafpad ,gedit ,kwrite 等等。。。。。。。只要您喜欢就行。

更改配置文件的方法:要看他的帮助文件。

比如以 set起始的,我们可以把前面的#号去掉。。

要设置hostname ,比如有这行。
# set hostname=""


我们可以改为

set hostname="localhost"
这个是必须的,也可以把localhost改为其它的,自己试试吧。。主要是用来收本地邮件的。比如系统邮件等。

还有pop的设置等。。。

自己改改就行了。

运行:

#mutt

按[caps lock]键切换成大写,然后按一下G键。就能收信了

如果出现 hostname 没有设置之类的。请设置上面所说的。。

还有一个是:/var/spool/mail/出现的错误,您可以自己建一个。比如:我用的是beinan系统用户。可以如下。

#touch /var/spool/mail/beinan
#chown beinan:mail /var/spool/mail/beinan

如果需要详细的设置,请看他的文档。在安装包中有。

另外是smtp的设置。。。。AMD-K6兄写的mutt的文章更为详细


我再说一下stmp方面的吧。我是用esmtp+sendmail 来发信的 http://esmtp.sourceforge.net
所以要简单的安装一个 esmtp ,在安装 esmtp 之前,要安装 libesmtp http://www.stafford.uklinux.net/libesmtp/ 这些东西都好安装。如果您没有sendmail ,也顺便安装一个。

安装 libesmtp
[root@S01mail]#tar jxvf libesmtp-1.0.3r1.tar.bz2
[root@S01mail]#cd libesmtp-1.0.3r1
[root@S01libesmtp-1.0.3r1]#./configure --enable-all
[root@S01libesmtp-1.0.3r1]#make;make install
[root@S01libesmtp-1.0.3r1]#./configure --enable-all

安装: esmtp

[root@S01mail]#tar jxvf esmtp-0.5.1.tar.bz2
[root@S01mail]#cd esmtp-0.5.1
[root@S01esmtp-0.5.1]#./configure
[root@S01esmtp-0.5.1]#make
[root@S01esmtp-0.5.1]#make install

如果看一下esmtp 的执行文件,可能在 /usr/local/bin目录中。
[root@S01esmtp-0.5.1]#ls -lh /usr/local/bin/esmtp
-rwxr-xr-x 1 root root 160K 2005-05-23 12:01 /usr/local/bin/esmtp


然后在当前用户的家目录中创建一个 .esmtprc的文件,权限为710的

[beinan@S01 ~]$touch .esmtprc
[beinan@S01 ~]$chmod 710 .esmtprc
[beinan@S01 ~]$ls -lh .esmtprc
-rwx--x--- 1 beinan users 97 2005-05-23 12:35 .esmtprc

内容主要有三行:
hostname = stmp的地址:端口
username = "用户名"
password = "用户密码"

举例:
hostname = mail.linuxsir.org.cn:25
username = "beinan@mail.linuxsir.org.cn"
password = "123456"


编辑好 .estmprc后,保存,然后向 .muttrc中加一行

set sendmail = "/usr/local/bin/esmtp -v -X ~/.esmtplog"

至于 sendmail的安装,您可以下载源码包,直接make 一下就OK了。。

注:有的信箱的用户名类似beinan@mail.linuxsir.org.cn ,专写beinan这样是不行的。最好按mail服务商提供的说明做。

debian 下看网络流量

#apt-get install iftop

#iftop



crontab 格式

第1列分钟1~59
第2列小时1~23(0表示子夜)
第3列日1~31
第4列月1~12
第5列星期0~6(0表示星期天)
第6列要运行的命令

下面是crontab的格式:
分 时 日 月 星期 要运行的命令

这里有crontab文件条目的一些例子:

30 21 * * * /usr/local/apache/bin/apachectl restart
上面的例子表示每晚的21:30重启apache。

45 4 1,10,22 * * /usr/local/apache/bin/apachectl restart
上面的例子表示每月1、10、22日的4 : 45重启apache。

10 1 * * 6,0 /usr/local/apache/bin/apachectl restart
上面的例子表示每周六、周日的1 : 10重启apache。

0,30 18-23 * * * /usr/local/apache/bin/apachectl restart
上面的例子表示在每天18 : 00至23 : 00之间每隔30分钟重启apache。

0 23 * * 6 /usr/local/apache/bin/apachectl restart
上面的例子表示每星期六的11 : 00 pm重启apache。

* */1 * * * /usr/local/apache/bin/apachectl restart
每一小时重启apache

* 23-7/1 * * * /usr/local/apache/bin/apachectl restart
晚上11点到早上7点之间,每隔一小时重启apache

0 11 4 * mon-wed /usr/local/apache/bin/apachectl restart
每月的4号与每周一到周三的11点重启apache

0 4 1 jan * /usr/local/apache/bin/apachectl restart
一月一号的4点重启apache

VMWare 虚拟机操作系统时间过快或过慢的解决

前面有一个帖子看到好几个朋友问自己的虚拟机操作系统的时间不正确,过快或者过慢,下面是解决方案.

[color=navy]解决vmware guest OS时间过快的方法:[/color]

step1: 安装 vmware tools
step2: 配置guest OS,打开 time synchronization
step3: 在grub 启动配置的kernel 那行结束,加上 clock=pit , 例子如下
__________________________
title Fedora Core (2.6.9-1.667)
root (hd0,0)
kernel /vmlinuz-2.6.9-1.667 ro root=/dev/hda2 clock=pit

如果guest OS不能安装vmware tools, 或者vmware guest OS是SuSE SLES9表现时间过快,用 clock=pmtmr 代替 clock=pit

[color=navy]解决vmware guest OS 时间过慢的方法:[/color]

step1: 安装 vmware tools
step2: 配置guest OS,打开 time synchronization
step3: 如果虚拟的是单cpu guest OS, 把nosmp noapic nolapic 这三个参数加到grub的kernel参数最后, 例子如下
_________________________
title Red Hat Linux (2.4.20-28.9)
root (hd0,0)
kernel /vmlinuz-2.4.20-28.9 ro root=/dev/hda2 clock=pit nosmp noapic nolapic

本帖参考了 VMWare 的VMTN 文档库Doc ID:1420 "Clock in a Linux Guest Runs More Slowly or Quickly Than Real Time"
如果要看详细的问题解释或原版,请访问 http://kb.vmware.com/vmtnkb/search.do?cmd=displayKC&docType=kc&externalId=1420&sliceId=SAL_Public

[color=navy]另外如果是企业环境,或者你的guest OS可以直接访问internet,除了安装vmware tools并打开time synchronization之外,可以在guest OS 里面启动ntp client服务,和外部internet上的time server 同步,这样guest OS的时间就非常精确了.[/color]