CentOS常用命令大全

一:使用CentOS常用命令查看cpu

more /proc/cpuinfo grep "model name"

grep "model name" /proc/cpuinfo

[root@localhost /]# grep "CPU" /proc/cpuinfo

model name : Intel(R) Pentium(R) Dual CPU E2180 @ 2.00GHz model name : Intel(R) Pentium(R) Dual CPU E2180 @ 2.00GHz 如果觉得需要看的更加舒服

grep "model name" /proc/cpuinfo cut -f2 -d:

二:使用CentOS常用命令查看内存

grep MemTotal /proc/meminfo grep MemTotal /proc/meminfo cut -f2 -d: free -m grep "Mem" awk 'print $2'

三:使用CentOS常用命令查看cpu是32位还是64位

查看CPU位数(32 or 64)

getconf LONG_BIT

四:使用CentOS常用命令查看当前linux的版本

more /etc/redhat-release

cat /etc/redhat-release

五:使用CentOS常用命令查看内核版本

uname -r

uname -a

六:使用CentOS常用命令查看当前时间

date上面已经介绍如何同步时间了

七:使用CentOS常用命令查看硬盘和分区

df -h

fdisk -l

也可以查看分区

du -sh

可以看到全部占用的空间

du /etc -sh

可以看到这个目录的大小

八:使用CentOS常用命令查看安装的软件包

查看系统安装的时候装的软件包

cat -n /root/install.log

more /root/install.log wc -l

查看现在已经安装了那些软件包

rpm -qa

rpm -qa wc -l

yum list installed wc -l

不过很奇怪,我通过rpm,和yum这两种方式查询的安装软件包,数量并不一样。没有找到原因。

九:使用CentOS常用命令查看键盘布局

cat /etc/sysconfig/keyboard

cat /etc/sysconfig/keyboard grep KEYTABLE cut -f2 -d=

十:使用CentOS常用命令查看selinux情况

sestatus

sestatus cut -f2 -d:

cat /etc/sysconfig/selinux

十一:使用CentOS常用命令查看ip,mac地址

在ifcfg-eth0 文件里你可以看到mac,网关等信息。 ifconfig cat /etc/sysconfig/network-scripts/ifcfg-eth0 grep IPADDR cat

/etc/sysconfig/network-scripts/ifcfg-eth0 grep IPADDR cut -f2 -d=

ifconfig eth0 grep "inet addr:" awk 'print $2'cut -c 6- ifconfig grep 'inet addr:' grep -v '127.0.0.1' cut -d: -f2 awk 'print $1' 查看网关 cat /etc/sysconfig/network 查看dns cat /etc/resolv.conf

十二:使用CentOS常用命令查看默认语言

echo $LANG $LANGUAGE

cat /etc/sysconfig/i18n

十二:使用CentOS常用命令查看所属时区和是否使用UTC时间

cat /etc/sysconfig/clock

十三:使用CentOS常用命令查看主机名

hostname

cat /etc/sysconfig/network

修改主机名就是修改这个文件,同时最好也把host文件也修改。 十四:使用CentOS常用命令查看开机运行时间

uptime

09:44:45 up 67 days, 23:32, ...

看来刚才确实是网段的问题,我的机器还是67天前开机的。

#系统资源使用情况

vmstat 1 -S m procs -----------memory---------- ---swap--

-----io---- --system-- -----cpu------ r b swpd free buff cache si so bi bo in cs us sy id wa st 0 0 0 233 199 778 0 0 4 25 1 1 3 0 96 0 0 0 0 0 233 199 778 0 0 0 0 1029 856 13 1 86 0 0

在众多的Linux终端命令中,我们应该分类来介绍一下,这里先说文件目录类、驱动挂载类、程序安装类、压缩解压类、进程控制类,这里所有的 Linux终端命令都会被经常的使用到,熟悉这些命令工作中应该能轻松许多。

一、文件目录类

1.建立目录:mkdir 目录名

2.删除空目录:rmdir 目录名

3.无条件删除子目录: rm -rf 目录名

4.改变当前目录:cd 目录名 (进入用户home目录:cd ~;进入上一级目录:cd -)

5.查看自己所在目录:pwd

6.查看当前目录大小:du

7.显示目录文件列表:ls -l (-a:增加显示隐含目录)

其中:蓝:目录;绿:可执行文件;红:压缩文件;浅蓝:链接文件;灰:其他文件;红底白字:错误的链接文件

8.浏览文件:more 文件名.txt;less 文件名.txt

9.复制文件: cp 源文件 目标文件 (-r:包含目录)

10.查找文件:(1)find (2)locate 命令名

11.链接:(1)建立hard链接:ln 来源文件 链接文件(-d:创建目录链接);(2)建立符号链接:ln -s 来源文件 链接文件

二.驱动挂载类

1.检查硬盘使用情况:df -T -h

2.检查磁盘分区:fdisk -l

3.挂载软硬光区:mount -t /dev/fdxhdax /mnt/目录名

其中::modos--FAT16;vfat--FAT32;ntfs--NTFS;光驱--iso9660

支持中文名:mount -o iocharset=x /dev/hdax /mnt/目录名(其中:x=cp936或

挂载光驱:mount -t auto /dev/cdrom /mnt/cdrom

挂载ISO文件:mount -t iso9660 -o loop xxx.iso /path

4.解除挂载:umount /mnt/目录名

解除所有挂载:umount -a

5.建立文件系统:mkfs -t /dev/hdxx。其中:ftype:ext2、ext3、swap等

三.程序安装类

1.RPM包安装:

(1)安装 rpm -ivh somesoft.rpm

(2)反安装(卸载) rpm -e somefost.rpm

(3)查询 rpm -q somefost 或 rpm -qpi somefost.rpm(其中:p未安装;i包含的信息)

(4)查询安装后位置:rpm -ql somefost.rpm

(5)升级安装:rpm -Uvh somesoft.rpm

(6)强制安装:rpm -ivh --nodeps somesoft.rpm 或 rpm -ivh --nodeps --force somesoft.rpm

2.源代码包安装:

查阅README

基本用法

(1)配置:解压目录下 ./configure

(2)编译:解压目录下 make

(3)安装:解压目录下 make install

3.src.rpm的安装

四.压缩解压类

tar命令:tar [-cxtzjvfpPN] 文件与目录 „.

tar命令参数:

-c :建立一个压缩文件的参数指令(create 的意思);

-x :解开一个压缩文件的参数指令!

-t :查看 tarfile 里面的文件!

特别注意,在参数的下达中, c/x/t 仅能存在一个!不可同时存在! 因为不可能同时压缩与解压缩。

-z :是否同时具有 gzip 的属性?亦即是否需要用 gzip 压缩?

-j :是否同时具有 bzip2 的属性?亦即是否需要用 bzip2 压缩?

-v :压缩的过程中显示文件!这个常用,但不建议用在背景执行过程! -f :使用档名,请留意,在 f 之后要立即接档名喔!不要再加参数! 例如使用『 tar -zcvfP tfile sfile』就是错误的写法,要写成 『 tar -zcvPf tfile sfile』才对喔!

-p :使用原文件的原来属性(属性不会依据使用者而变)

-P :可以使用绝对路径来压缩!

-N :比后面接的日期(yyyy/mm/dd)还要新的才会被打包进新建的文件中! –exclude FILE:在压缩的过程中,不要将 FILE 打包!

范例:

范例一:将整个 /etc 目录下的文件全部打包成为 /tmp/etc.tar

[root@linux ~]# tar -cvf /tmp/etc.tar /etc<==仅打包,不压缩! tar -cvf 目标文件 源文件 (以下同)例如:tar -cvf a.txt.tar a.txt

[root@linux ~]# tar -zcvf /tmp/etc.tar.gz /etc<==打包后,以 gzip 压缩

[root@linux ~]# tar -jcvf /tmp/etc.tar.bz2 /etc<==打包后,以 bzip2 压缩

# 特别注意,在参数 f 之后的文件档名是自己取的,我们习惯上都用 .tar 来作为辨识。

# 如果加 z 参数,则以 .tar.gz 或 .tgz 来代表 gzip 压缩过的 tar file ~

# 如果加 j 参数,则以 .tar.bz2 来作为附档名啊~

# 上述指令在执行的时候,会显示一个警告讯息:

# 『tar: Removing leading `/” from member names』那是关於绝对路径的特殊设定。

范例二:查阅上述 /tmp/etc.tar.gz 文件内有哪些文件?

[root@linux ~]# tar -ztvf /tmp/etc.tar.gz

# 由於我们使用 gzip 压缩,所以要查阅该 tar file 内的文件时, # 就得要加上 z 这个参数了!这很重要的!

范例三:将 /tmp/etc.tar.gz 文件解压缩在 /usr/local/src 底下

[root@linux ~]# cd /usr/local/src

[root@linux src]# tar -zxvf /tmp/etc.tar.gz

# 在预设的情况下,我们可以将压缩档在任何地方解开的!以这个范例来说, # 我先将工作目录变换到 /usr/local/src 底下,并且解开

/tmp/etc.tar.gz ,

# 则解开的目录会在 /usr/local/src/etc 呢!另外,如果您进入 /usr/local/src/etc

# 则会发现,该目录下的文件属性与 /etc/ 可能会有所不同喔!

范例四:在 /tmp 底下,我只想要将 /tmp/etc.tar.gz 内的 etc/passwd 解开而已

[root@linux ~]# cd /tmp

[root@linux tmp]# tar -zxvf /tmp/etc.tar.gz etc/passwd

# 我可以透过 tar -ztvf 来查阅 tarfile 内的文件名称,如果单只要一个文件,

# 就可以透过这个方式来下达!注意到! http://www.007bct.net 内的根目录 / 是被拿掉了!

范例五:将 /etc/ 内的所有文件备份下来,并且保存其权限!

[root@linux ~]# tar -zxvpf /tmp/etc.tar.gz /etc

# 这个 -p 的属性是很重要的,尤其是当您要保留原本文件的属性时! 范例六:在 /home 当中,比 2005/06/01 新的文件才备份

[root@linux ~]# tar -N “2005/06/01″ -zcvf home.tar.gz /home 范例七:我要备份 /home, /etc ,但不要 /home/dmtsai

[root@linux ~]# tar –exclude /home/dmtsai -zcvf myfile.tar.gz /home/* /etc

范例八:将 /etc/ 打包后直接解开在 /tmp 底下,而不产生文件!

[root@linux ~]# cd /tmp

[root@linux tmp]# tar -cvf - /etc tar -xvf -

# 这个动作有点像是 cp -r /etc /tmp 啦~依旧是有其有用途的!

# 要注意的地方在於输出档变成 - 而输入档也变成 - ,又有一个 存在~ # 这分别代表 standard output, standard input 与管线命令啦!

五.进程控制类

1.列出当前进程ID:ps -auxw

2.终止进程:(1)终止单一进程:kill 进程ID号

(2)终止该程序所有进程:Killall 程序名

(3)终止X-Window程序:xkill

3.查看资源占用情况:(1)top (2)free (3)dmesg

4.查看环境变量值:env

5.重启:(1)reboot (2)Ctrl Alt Del (3)init 6

6.关机:(1)shutdown -h now (2)halt (3)init 0

7.切换桌面:switchdesk gnomeKDE...

六,Vim操作
   移动类的:
   h/j/k/l: 左/下/上/右 移一格
   w : 向后词移动 (前面加数字移动多少个词)
   b : 向前词移动 (前面加数字移动多少个词)
   e : 向后移到词末
   ge : 向前移到词末
   $ <End> : 行末
   0 <Home> : 行首
   tx : 向右查找本行的x并移到那儿(大写时向左)
   33G : 移到文件的第33行
   gg : 文件首行
   G : 文件尾行
   33% : 文件的33%处
   H/M/L : 屏幕的首/中/尾行
   zt/zz/zb : 当前行移到屏幕的首/中/底部
   跳转:
   "  : 回到跳转来的地方
   CTRL-O : 跳到一个 “较老” 的地方
   CTRL-I <Tab> : 则跳到一个 “较新” 的地方

   查找:
   / : 向下查找(后加关键字)
   ? : 向上查找(后加关键字)
   n : 下一条符合的记录

   编辑:
   i : 转换到插入模式
   x : 删除当前字符
   . : 重复最后一次的修改操作(同PS里ctrl+f执行滤镜)
   u : 撤销操作
   CTRL-R : 重做
   p : 将删除的字符插入到当前位置(put)


   退出保存:
   :q : 退出
   :q! : 不保存退出
   ZZ : 保存后退出
   :e! : 放弃修改重新编辑

删除操作:

删除一行:dd

 

删除一个单词/光标之后的单词剩余部分:dw

 

删除当前字符:x

 

光标之后的该行部分:d$

 

 

文本删除

dd 删除一行

d$ 删除以当前字符开始的一行字符

 

ndd 删除以当前行开始的n行

dw 删除以当前字符开始的一个字

ndw 删除以当前字符开始的n个字

 

D 与d$同义

 

d) 删除到下一句的开始

 

d} 删除到下一段的开始

d回车 删除2行

ndw 或 ndW 删除光标处开始及其后的 n-1 个字符。
d0 删至行首。
d$ 删至行尾。
ndd 删除当前行及其后 n-1 行。
x 或 X 删除一个字符。
Ctrl+u 删除输入方式下所输入的文本。
^R 恢复u的操作
J 把下一行合并到当前行尾
V 选择一行
^V 按下^V后即可进行矩形的选择了
aw 选择单词
iw 内部单词(无空格)
as 选择句子
is 选择句子(无空格)
ap 选择段落
ip 选择段落(无空格)
D 删除到行尾
x,y 删除与复制包含高亮区

dl 删除当前字符(与x命令功能相同)
d0 删除到某一行的开始位置
d^ 删除到某一行的第一个字符位置(不包括空格或TAB字符)
dw 删除到某个单词的结尾位置
d3w 删除到第三个单词的结尾位置
db 删除到某个单词的开始位置
dW 删除到某个以空格作为分隔符的单词的结尾位置
dB 删除到某个以空格作为分隔符的单词的开始位置
d7B 删除到前面7个以空格作为分隔符的单词的开始位置
d) 删除到某个语句的结尾位置
d4) 删除到第四个语句的结尾位置
d( 删除到某个语句的开始位置
d) 删除到某个段落的结尾位置
d{ 删除到某个段落的开始位置
d7{ 删除到当前段落起始位置之前的第7个段落位置
dd 删除当前行
d/text 删除从文本中出现“text”中所指定字样的位置,
一直向前直到下一个该字样所出现的位置(但不包括该字样)之间的内容
dfc 删除从文本中出现字符“c”的位置,一直向前直到下一个该字符所出现的位置(包括该字符)之间的内容
dtc 删除当前行直到下一个字符“c”所出现位置之间的内容
D 删除到某一行的结尾
d$ 删除到某一行的结尾
5dd 删除从当前行所开始的5行内容
dL 删除直到屏幕上最后一行的内容
dH 删除直到屏幕上第一行的内容
dG 删除直到工作缓存区结尾的内容
d1G 删除直到工作缓存区开始的内容



    七,Shell sed手册

sed 命令列可分成编辑指令与文件档部份。其中, 编辑指令负责控制所有的编辑工作; 文件档表示所处理的档案。sed 的编辑指令均由位址(address)与函数(function)两部份组成, 其中, 在执行时, sed 利用它的位址参数来 决定编辑的对象;而用它的函数参数(解[3])编辑。 此外, sed 编辑指令, 除了可在命令列上执行, 也可在档案内执行。其中差别只是在命令列上执行时, 其前必 须加上选项-e ; 而在档案(解[4])内时, 则只需在其档名前加上选项-f。另外 , sed 执行编辑指令是依照它 们在命令列上或档内的次序。
下面各节, 将介绍执行命令列上的编辑指令 、sed 编辑指令、执行档案内的编辑指令、执行多个档案的编辑、及 执行sed 输出控制。
2.1 执行命令列上的编辑指令
2.2 sed 编辑指令
2.3 执行档案内的编辑指令
2.4 执行多个档案的编辑
2.5 执行sed 输出控制
2.1.执行命令列上的编辑指令
当编辑指令(参照[section 2.2])在命令列上执行时, 其前必须加上选项-e 。其命令格式如下:
sed -e '编辑指令1' -e '编辑指令2' ... 文件档
其中, 所有编辑指令都紧接在选项-e 之後, 并置於两个" ' " 特殊字元间。另外, 命令上编辑指令的执行是由 左而右。
一般编辑指令不多时, 使用者通常直接在命令上执行它们。例如, 删除yel.dat 内1 至10 行资料, 并将其 馀文字中的"yellow" 字串改成"black" 字串。此时, 可将编辑指令直接在命令上执行, 其命令如下:
sed -e '1,10d' -e 's/yellow/black/g' yel.dat
在命令中, 编辑指令'1,10d'(解[5])执行删除1 至10 行资料; 编辑指令's/yellow/black/g'(解[6]) , "yellow" 字串替换(substuite)成"black" 字串。
2.2 sed 的编辑指令
sed 编辑指令的格式如下:
[address1[,address2]]function[argument]
其中, 位址参数address1 、address2 为行数或regular expression 字串, 表示所执行编辑的资料行 ; 函数参数function[argument] 为sed 的内定函数, 表示执行的编辑动作。 下面两小节, 将仔细介绍位址参数的表示法与有哪些函数参数供选择。
2.2.1 位址(address)参数的表示法
实际上, 位址参数表示法只是将要编辑的资料行, 用它们的行数或其中的字串来代替表示它们。下面举几个例子 说明(指令都以函数参数d(参照[section4.2]) 为例) :
删除档内第10 行资料, 则指令为10d。
删除含有"man" 字串的资料行时, 则指令为/man/d。
删除档内第10 行到第200 行资料, 则指令为10,200d。
删除档内第10 行到含"man" 字串的资料行, 则指令为10,/man/d。
接下来, 以位址参数的内容与其个数两点, 完整说明指令中位址参数的表示法(同样也以函数参数d 为例)。
位址参数的内容: 位址为十进位数字: 此数字表示行数。当指令执行时, 将对符合此行数的资料执行函数参数指示的编辑动作。例如,
删除资料档中的第15 行资料, 则指令为15d(参照[section4.2])。其馀类推,如删除资料档中的第m 行资料, 则指令为md 。
位址为regular expression(参照[附录A]): 当资料行中有符合regular expression 所表示的字串时, 则执行函数参数指示的编辑动作。另外, 在regular expression 前後必须加上"/"。例如指令为/t.*t/d , 表示删除所有含两"t" 字母的资料行。其中, "." 表示任意字元; "*" 表示其前字元可重任意次, 它们结合".*" 表示两"t" 字母间的任意字串。
位址参数的个数: 在指令中, 当没有位址参数时, 表示全部资料行执行函数参数所指示的编辑动作; 当只有一位址 参数时, 表示只有符合位址的资料行才编辑; 当有两个位址参数, 如address1,address2 时, 表示对资料区执行 编辑, address1 代表起始资料行, address2 代表结束资料行。对於上述内容, 以下面例子做具说明。
例如指令为d 其表示删除档内所有资料行。
例如指令为5d 其表示删除档内第五行资料。
例如指令为1,/apple/d 其表示删除资料区, 由档内第一行至内有"apple" 字串的资料行。
例如指令为/apple/,/orange/d 其表示删除资料区, 由档内含有"apple" 字串至含有"orange" 字串的资料行
2.2.2 有那些函数(function)参数
下页表中介绍所有sed 的函数参数(参照[chapter 4])的功能。
函数参数 功能: label 建立script file 内指令互相参考的位置。
# 建立解
{ } 集合有相同位址参数的指令。
! 不执行函数参数。
= 印出资料行数( line number )。
a 添加使用者输入的资料。
b label 将执行的指令跳至由: 建立的参考位置。
c 以使用者输入的资料取代资料。
d 删除资料。
D 删除pattern space 内第一个newline 字母 前的资料。
g 拷贝资料从hold space。
G 添加资料从hold space 至pattern space 。
h 拷贝资料从pattern space 至hold space 。
H 添加资料从pattern space 至hold space 。
l 印出l 资料中的nonprinting character 用ASCII 码。
i 插入添加使用者输入的资料行。
n 读入下一笔资料。
N 添加下一笔资料到pattern space。
p 印出资料。
P 印出pattern space 内第一个newline 字母 前的资料。
q 跳出sed 编辑。
r 读入它档内容。
s 替换字串。
t label 先执行一替换的编辑指令, 如果替换成牛p>则将编辑指令跳至: label 处执行。
w 写资料到它档内。
x 交换hold space 与pattern space 内容。
y 转换(transform)字元。
虽然, sed 只有上表所述几个拥有基本编辑功能的函数, 但由指令中位址参数和指令与指令间的配合, 也能使sed 完成大部份的编辑任务。
2.3 执行档案内的编辑指令
当执行的指令太多, 在命令列上撰写起来十分混乱, 此时, 可将这些指令整理储存在档案(譬如档名为script_file )内, 用选项-f script_file , 则让sed 执行script_file 内的编辑指令。其命 令的格示如下:
sed -f script_file 文件档
其中, 执行script_file 内编辑指令的顺序是由上而下。例如上一节的例子, 其可改成如下命令: sed -f ysb.scr yel.dat
其中, ysb.scr 档的内容如下:
1,10d
s/yellow/black/g
另外, 在命令列上可混合使用选项-e 与-f , sed 执行指令顺序依然是由命令列的左到右, 如执行至-f 後 档案内的指令, 则由上而下执行。
2.4 执行多个文件档的编辑
在sed 命令列上, 一次可执行编辑多个文件档, 它们跟在编辑指令之後。例如, 替换white.dat、red.dat、black.dat 档内的"yellow" 字串成"blue" , 其命令如下:
sed -e 's/yellow/blue/g' white.dat red.dat black.dat
上述命令执行时, sed 依white.dat、red.dat、black.dat 顺序, 执行编辑指令s/yellow/blue/(请参照[section 4.1] , 进行字串的替换。
2.5.执行输出的控制
在命令列上的选项-n (解[7]) 表示输出由编辑指令控制。由前章内容得知, sed 会"自动的" 将资料由pattern space 输送到标准输出档。但藉着选项-n , 可将sed 这"自动的" 的动作改成"被动的" 由它所执行的编辑指令(解[8])来决定结果是否输出。
由上述可知, 选项-n 必须与编辑指令一起配合, 否则无法获得结果。例如, 印出white.dat 档内含有"white" 字串的资料行, 其命令如下:
sed -n -e '/white/p' white.dat
上面命令中, 选项-n 与编辑指令/white/p (参照[section4.6]) 一起配合控制输出。其中, 选项-n 将输出控制权移给编辑指令;/white/p 将资料行中含有"white" 字串印出萤幕。
SED 手册- 3.例
http://phi.sinica.edu.tw aspac@phi.sinica.edu.tw (2001-07-29 13:05:00)
 
一般在实际使用编辑器的过程中, 常需要执行替换文件中的字串、搬移、删除、与搜寻资料行等等动作。当然, 一般交谈式编辑器(如vi、emacs)都能做得到上述功能, 但文件一旦有大量上述编辑需求时, 则 用它们编辑十分没有效率。本章将用举例的方式说明如何用sed 自动执行这些编辑功能。此外, 在本章 例中, 均以下述方式描述文件的需求:
将文件中...资料, 执行...(动作)
如此, 目的是为了能将它们迅速的转成编辑指令。其中, " ...资料" 部份, 转成指令中的位址参数表示; "执行...动作" 部份, 则转成函数参数表示。另外, 当"执行...动作" 要由数个函数参数表示时, 则可利 用"{ "与" }" 集合这些函数参数(解[9]) , 其指令形式如下:
位址参数{
函数参数1
函数参数2
函数参数3
.
:
}
上述指令表示, 将对符合位址参数的资料, 依次执行函数参数1、函数参数2、函数参数3 ... 表示的动作。
下面各节, 分别举例说明sed 替换资料、移动、删除资料、及搜寻资料的命令。
3.1 替换文件中的资料
3.2 搬动文件中的资料
3.3 删除文件中的资料
3.4 搜寻文件中的资料
3.1 替换文件中的资料
Sed 可替换文件中的字串、资料行、甚至资料区。其中, 表示替换字串的指令中的函数参数为s(参照[section4.1]); 表示替换资料行、或资料区的指令中的函数参数为c(参照[section4.5])。上述情况以下面三个例子说明。上述情况以下面三个例子说明。
例一. 将文件中含"machine" 字串的资料行中的"phi" 字串, 替换成为"beta" 字串。其命令列如下:
sed -e '/machine/s/phi/beta/g' input.dat(以後文件档都以input.dat 代表)
例二. 将文件中第5 行资料, 替换成句子"Those who in quarrels interpose, must often wipe a bloody nose."。
其命令列如下
sed -e '5c
Those must often wipe a bloody nose.
' input.dat
例三. 将文件中1 至100 行的资料区, 替换成如下两行资料:
How are you?
data be deleted!
则其命令列如下
sed -e '1,100c
How are you?
data be deleted!
' input.dat
3.2 搬动文件中的资料
使用者可用sed 中的hold space 暂存编辑中的资料、用函数参数w(参照[section4.9])将文件资料搬动到它档内储存、 或用函数参数r(参照[section4.8])将它档内容搬到文件内。Hold space 是sed 用来暂存pattern space 内资料的暂 存器, 当sed 执行函数参数h、H(参照[section4.19])时, 会将pattern space 资料暂存到hold space;当执行函 数参数x、g、G(参照[section4.22])时, 会将暂存的资料取到pattern space 。下面举三个例子说明。
例一. 将文件中的前100 资料, 搬到文件中第300 後输出。其命令列如下:
sed -f mov.scr 文件档
mov.scr 档的内容为
1,100{
H
d
}
300G
其中,
1,100{
H
d
}
它表示将文件中的前100 资料, 先储存(参照[section4.19])在hold space 之後删除;指令300G (参照[section4.22]) 表示, 将hold space 内的资料, 添加在文件中的第300 资料後输出。
例二. 将文件中含"phi" 字串的资料行, 搬至mach.inf 档中储存。其命令列如下:
sed -e '/phi/w mach.inf' 文件档
例三. 将mach.inf 档内容, 搬至文件中含"beta" 字串的资料行。其命令列如下:
sed -e '/beta/r mach.inf' 文件档
另外, 由於sed 是一stream(参照[section1.4])编辑器, 故理论上输出後的文件资料不可能再搬回来编辑。
3.3 删除文件中的资料
因为sed 是一行编辑器, 所以sed 很容易删除个别资料行或整个资料区。一般用函数参数d(参照[section4.2])或D(参照[section4.17]) 来表示。下面举两个例子说明。
将文件内所有空白行全部删除。其命令列为
sed -e '/^$/d' 文件档
regular expression(解[附录A]) , ^$ 表示空白行。 其中, ^ 限制其後字串必须在行首; $ 限制其前字串必须在行尾。
将文件内连续的空白行, 删除它们成为一行。其命令列为
sed -e '/^$/{
N
/^$/D
}' 文件档
其中, 函数参数N(参照[section4.16])表示, 将空白行的下一行资料添加至pattern space 内。函数参数/^$/D 表示, 当添加的是空白行时, 删除第一行空白行, 而且剩下的空白行则再重新执行指令一次。指令重新执行一次, 删除一行空白行, 如此反覆直至空白行後添加的为非空白行为止, 故连续的空白行最後只剩一空白行被输出。
3.4 搜寻文件中的资料
Sed 可以执行类似UNIX 命令grep 的功能。理论上, 可用regular expression(参照[附录A])。例如, 将文件中含有"gamma" 字串的资料行输出。则其命令列如下:
sed -n -e '/gamma/p' 文件档 但是, sed 是行编辑器, 它的搜寻基本上是以一行为单位。因此, 当一些字串因换行而被拆成两部份时, 一般的方法 即不可行。此时, 就必须以合两行的方式来搜寻这些资料。其情况如下面例子:
例. 将文件中含"omega" 字串的资料输出。其命令列如下
sed -f gp.scr 文件档
gp.scr 档的内容如下:
/omega/b
N
h
s/.* //
/omega/b
g
D
在上述sed script(解[10]), 因藉着函数参数b 形成类似C 语言中的case statement 结构, 使得sed 可分别处理当 资料内含"omega" 字串; 当"omega" 字串被拆成两行; 以及资料内没有"omega" 字串的情况。接下来就依上述的三种情 况, 将sed script 分成下面三部份来讨论。 当资料内含"omega" , 则执行编辑指令
/omega/b
它表示当资料内含"omega" 字串时, sed 不用再对它执行後面的指令, 而直接将它输出。 当资料内没有"omega" , 则执行编辑指令如下
N
h
s/.* //
/omega/b
其中, 函数参数N(参照[section 4.16]) , 它表示将下一行资料读入使得pattern space 内含前後两行资料 。函数参 数h(参照[section 4.19]) , 它表示将pattern space 内的前後两行资料存入hold space 。函数参数s/.* // , 它 表示将pattern space 内的前後两行资料合(解[11])成一行。/omega/b , 它表示如果合後的资料内含"omega" 字 串, 则不用再执行它之後的指令, 而将此资料自动输出;
当合後的资料依旧不含"omega" , 则执行编辑指令如下
g
D
 
其中, 函数参数g(参照[section4.21]) , 它表示将hold space 内合前的两行资料放回pattern space。函数参数D(参照[section4.17]) , 它表示删除两行资料中的第一行资料, 并让剩下的那行资料, 重新执行sed script。如此, 无论的资料行内或行间的字串才可搜寻完全。
SED 手册- 4.介绍函数参数
http://phi.sinica.edu.tw aspac@phi.sinica.edu.tw (2001-07-30 07:00:00)
本章将以一节一个函数参数的方式,介绍所有sed 提供的函数参数, 其中有
| s | d | a | i | c | p | l | r | w | y | ! | n | q | = | # | N | D | P | h | H | g | G | x | b | t |
另外, 在各节中, 首先简单介绍函数参数功能, 接着说明函数参数与位址参数配合的格式, 而其中也一描述sed 执行此函数参数的工作情形。
4.1 s
函数参数s 表示替换(substitute)文件内字串。其指令格式如下:
[address1[ ,address2]] s/pattern/replacemen/[flag]
对上述格式有下面几点说明:
函数参数s 最多与两个位址参数配合。 关於"s/pattern/replacement/[flag]"(解[12]) 有下面几点说明:
pattern : 它为reguler expression 字串。它表示文件中要被替换的字串。
replacement : 它为一般字串。但其内出现下列字元有特别意义:
& : 代表其前pattern 字串。例如
sed -e 's/test/& my car/' 资料档名
指令中, & 代表pattern 字串"test"。故执行後, 资料档的"test" 被替换成"test my car"。
: 代表pattern 中被第n 个( 、)(参照[附录A]) 所括起来的字串。例如
sed -e 's/(test) (my) (car)/[2 3 1]/' 资料档名
指令中, 1 表示"test"、2 表示"my"、1 表示"car" 字串。故执行後, 资料档的"test my car" 被替换 成"[my car test]"。
: 可用它来还原一些特殊符号(如上述的& 与)本身字面上的意义, 或用它来代表换行。
flag : 主要用它来控制一些替换情况:
当flag 为g 时, 代表替换所有符合(match)的字串 。
当flag 为十进位数字m 时, 代表替换行内第m 个符合的字串。
当flag 为p 时, 代表替换第一个符合pattern 的字串後, 将资料输出标准输出档。
当flag 为w wfile 时, 代表替换第一个符合pattern 的字串後, 输出到wfile 档内(如果wfile 不存在, 则会 重新开启名为wfile 的档案)。
当没有flag 时, 则将资料行内第一个符合pattern 的字串以replacement 字串来替换 。
delimiter : 在"/pattern/replace/[flag] " 中"/" 被当成一delimiter。除了空白(blank)、换行(newline) 之外,
使用者可用任何字元作为delimiter。例如下述编辑指令
s#/usr#/usr1#g
 
上述命令中verb|#| 为delimiter。如果用"/" 做delimiter , 则sed 会将pattern 与replacement 中的"/" 当成delimiter 而发生错误。
例:
题目: 替换 input.dat 档(後面如果没有特别指定, 均假设文件档名为input.dat)内"1996" 字串成"1997" , 同时将这些资料行存入year97.dat 档内。
说明: 用函数参数s 指示sed 将"1996" 字串替换成"1997" , 另外用s argument 中的flag w 指示sed 将替换 过的资料行存入year97.dat 档内。
sed 命令列:
sed -e 's/1996/1997/w year97.dat' input.dat
4.2 d
函数参数d 表示删除资料行, 其指令格式如下:
[address1[ ,address2]] d
对上述格式有下面几点说明:
函数参数d 最多与两个位址参数配合。
sed 执行删除动作情况如下:
将pattern space 内符合位址参数的资料删除。
将下一笔资料读进pattern space 。
重新执行sed script。
例: 可参考section 3.3。
4.3 a
函数参数a 表示将资料添加到文件中。其指令格式如下:
[address1] a 使用者所输入的资料
对上述格式有下面几点说明:
函数参数a 最多与一个位址参数配合。
函数参数a 紧接着"" 字元用来表示此行结束, 使用者所输入的资料必须从下一行输入。如果资料超过一行, 则须在 每行的结尾加入""。
sed 执行添加动作情况如下: 当pattern space 内资料输出後, sed 跟着输出使用者所输入的资料。
例: 题目: 添加"多工作业系统" 在含"UNIX" 字串的资料行後。假设input.dat 档的内容如下:
UNIX
说明: 用函数参数a 将所输入的资料添加在含"UNIX" 字串的资料行後。
sed 命令列如下:
sed -e '/UNIX/a
多工作业系统
' input.dat
执行上述命令後, 其输出结果如下:
UNIX
多工作业系统
4.4 i
函数参数i 表示将资料插入文件中。其指令格式如下:
[address1] i 使用者所输入的资料
对上述格式有下面几点说明:
函数参数i 最多与一个位址参数配合。
函数参数i 紧接着"" 字元用来表示此行结束, 使用者所输入的资料必须从下一行输入。如果资料超过一行, 则须在 每行的结尾加入""。
sed 执行插入动作的情况如下: 在pattern space 内资料输出前, sed 先输出使用者所输入的资料。
例: 题目: 将"文章版权属於中央研究院" 插在input.dat 档中含"院长: 李远哲" 的资料行之前。假设input.dat 档内 容如下:
院长: 李远哲
说明: 用函数参数i 将资料行"文章版权属於中央研究院" 插在含"院长: 李远哲" 的资料行之前。
sed 命令列如下:
sed -e '/院长: 李远哲/i
文章版权属於中央研究院
' input.dat
执行上述命令後的输出如下:
文章版权属於中央研究院
院长: 李远哲
4.5 c
函数参数c 表示改变文件中的资料。其格式如下:
[address1[ ,address2]]c 使用者所输入的资料
对上述格式有下面几点说明:
函数参数c 最多与两个位址参数配合。
函数参数c 紧接着"" 字元用来表示此行结束, 使用者所输入的资料必须从下一行输入。如果资料超过一行, 则须在 每行的结尾加入""。
sed 执行改变动作的情况: 在pattern space 内资料输出时, sed 改变它成为使用者所输入的资料。
例: 参考section 3.1 之例二、三。
4.6 p
函数参数p 表示印出资料。其指令格式如下:
[address1[ , address2]] p
对於上述格式有下面几点说明:
函数参数p 最多与两个位址参数配合。
sed 执行印出动作的情况如下: sed 拷备一份pattern space 内容至标准输出档。
例: 参考section 3.4 开头的内容。
4.7 l
函数参数l , 除可将资料中的nonprinting character 以ASCII码列出外, 其於均与函数参数p 相同。例如, 将下 面input.dat 档中的^[ 以ASCII 码印出
The Great ^[ is a movie starring Steve McQueen.
 
执行命令sed -e 'l' input.dat 後, 则输出结果如下:
The Great

    八,文件测试命令

   

条件返回值状态
  test -e filename True 文件存在
  test -f filename True 文件存在并且是一般文件
  test -d filename True 文件存在并且是目录文件
  test -r filename True 文件存在并且可读
  test -w filename True 文件存在并且可写
  test -x filename True 文件存在并且可执行
  test -s filename True 文件存在并且不为空
  test -b filename True 文件存在并且是特殊块
  test -L filename True 文件存在并且是符号链接
  test -O filename True 文件存在并且属于当前用户
  test -G filename True 文件存在并且属于当前用户组
  test file1 -nt file2 True 文件file1比文件file2新
  test file1 -ot file2 True 文件file1比文件file2旧

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值