Chinaunix首页 | 论坛 | 博客
  • 博客访问: 79249
  • 博文数量: 21
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 280
  • 用 户 组: 普通用户
  • 注册时间: 2012-08-18 16:08
文章分类

全部博文(21)

文章存档

2016年(2)

2014年(11)

2013年(8)

我的朋友

分类: LINUX

2013-07-15 22:56:15

1.文件的搜索和替换操作

       (注意:此操作都是在末行模式下进行)

       1.1.s/old/new/gc  将当前行的old字符串替换为new字符串,并要求进行确认;其中c表示需要确认;不加就不会提示要求确认;

       1.2.n,ms/old/new/gc 将第n行到第m行字符串替换为new字符串,并要求确认;

       1.3.%s/old/new/gc   将文件中所有的old字符串替换为new字符串,并不要求确认;(=,$s/old/new/g)

       1.4.:10,20s/^/#/g    在第10行到第20行的行首插入#号;

       1.5.:1,10s/$/@@/g 在第1行到第10行的行未插入@@号;

      

练习:将httpd.conf文件中的第100行到第500行中的httpd替换为ftp,并要求进行确认。

       :100,500s/http/ftp/gc

              替换为 ftp (y/n/a/q/l/^E/^Y)

              15 次替换,共 10

       特殊用法:

              %s/^/#/g     %s/$/#/g

      

2.可视模式下的操作:

       v     选择指定的字符;

       V     选择指定的行;

       ctrl+V  选择指定的块;

       x,d   实际是剪切的作用;但是如果不去粘贴,就是删除的效果;

       U     可以把所有选择的都变为大写;

       u     可以把所有选择的内容都变为小写;

 

3.VIM的设置

       :set nu number      设置显示行号

       :set nonu        取消行号

       :set cursorline        显示当前行的下划线

       :set nocursorline     取消当前行的下划线

       :set nohlsearch              取消搜索的高亮显示

       可以通过帮助命令:help set来完成;

       (扩展:多文件操作,用vim通过打开多个文件是,可以使用命令last,first,next等变换文件来操作)

 

    练习

    (1)删除/myfile目录下的所有文件,复制/etc/httpd/conf/httpd.conf/myfile目录下

    (2)显示行号

    (3)将文件中所有的httpd替换为squid

    (4)删除第1行到第450行,第500行到最后一行

    (5)将每一行行首的#去掉,在每一行的行尾添加字符"**"

       %s/^#//g

    (6)/etc/hosts文件添加到httpd.conf文件的最后面

       r /etc/hosts

    (7)httpd.conf中的第1至第5行剪切到文件的最后面

    (8)删除第一行到第10行中的前5个字符

       先选定块,然后使用delete来删除;当然也可以使用d来删除;

    (9)将第10行中的所有字符变为大写

    (10)文件另存为/myfile/web.conf

 

第七章 文件目录的高级操作

       1.输入输出重定向

[root@schangech proj]# ls /etc/ -R >file11 把命令的输出内容重定向到文件file11里面;

       linux内核对输入输出的描述:

              0  内核在工作的时候,默认情况下为00号文件代表标准输入;默认为键盘;

              1  代表标准输出,默认是终端;一般是显示器;

              2  代表错误输出,默认为终端;一般是显示器;

[root@schangech proj]# cat web.conf

 

[root@schangech proj]# cat        当没有指定文件或者内容时,会等待键盘输入内容。然后输出。

love

love

输入输出重定向

<    标准输入(默认的)[root@schangech proj]# cat 是一致的)

>    标准输出重定向,会覆盖已有的文件内容;   [root@schangech proj]# cat web.conf > file00004

[root@schangech proj]# cat web.conf lve 2>error      表示仅仅重定向2号文件到error中,1号文件依旧在屏幕显示;

>>  标准追加输出重定向,将输出的内容追加到文件的末尾;

2>  错误输出重定向;

2>>  错误输出重定向,将输出的内容追加到文件的末尾;

&>  同时表示标准输出和错误输出;[root@schangech proj]# cat lge gwieoagh dsgwe file11 dsg8ewhg &>test1

&>>  将标准输出和错误输出追加到文件的末尾;

 

练习:1.从键盘创建文件keyboard.txt       (使用ctrl+d来正常终止程序)

[root@schangech proj]# cat > keyboard.txt

HELLO

HELLO WORLD !

THANKS !

NI HAO MA

[root@schangech proj]# cat keyboard.txt

HELLO

HELLO WORLD !

THANKS !

NI HAO MA

 

     2.查看/var目录及其下面所有的目录,将结果重定向到log.txt中;

[root@schangech proj]# ls -R /var >log.txt

[root@schangech proj]# tree /var >> log.txt

      

     3.显示errorweb.conf,file2,file3,file4文件的内容,分别将标准输出放入std.txt中,将错误输出放入err.txt中;

[root@schangech proj]# cat error web.conf file2 file3 file4 >std.txt 2>err.txt

 

/dev/null 又名无底洞(黑洞),生成在里面的东西,会消失,不会存在;

[root@schangech proj]# cat error web.conf file2 file3 file4 >std.txt 2>/dev/null

[root@schangech proj]# cat error web.conf file2 file3 file4 >std.txt

cat: file2: 没有那个文件或目录

cat: file3: 没有那个文件或目录

cat: file4: 没有那个文件或目录

 

[root@schangech proj]# cat a b c d e f g &>test.txt  

[root@schangech proj]# cat test.txt

lvoejhawigajgaliwgj

cat: c: 没有那个文件或目录

cat: d: 没有那个文件或目录

cat: e: 没有那个文件或目录

cat: f: 没有那个文件或目录

cat: g: 没有那个文件或目录

 

       |  管道符,将前一个命令的输出作为后一个命令的输入;

 

       4.统计/etc目录下链接文件的数量,并将结果放在sum.txt中;

[root@schangech etc]# find /etc -type l|wc -l >sum.t

 

       5.其他相关命令:

       5.1 echo  显示变量的值或显示信息;(回写)

[root@localhost proj]# vim sum.sh

[root@localhost proj]# whereis let

let: /usr/share/man/man1/let.1.gz

[root@localhost proj]# let sum =5+6

bash: let: =5+6: syntax error: operand expected (error token is "=5+6")

[root@localhost proj]# let sum=5+6

[root@localhost proj]# echo $sum

11

[root@localhost proj]# vim sum.sh

[root@localhost proj]# chmod 755 sum.sh

[root@localhost proj]# ls

sum.sh

[root@localhost proj]# ./sum.sh

Please input a number:

10

10

please input a number:

20

20

sum is 30

[root@localhost proj]# echo $[15+12]

27

 

#echo $PATH  可以显示环境变量

#echo "please input a number:"    echo可以显示一般信息;

#echo $[12+17]            可以实现一般简单的计算

#echo $((13+18))   同上....

 

       5.2.关于引号的使用;

       “”  双引号表示弱引用;

       ‘’  单引号表示强引用;不对内容做解释;直接输出;

       ``  反撇号,在命令当中执行其它命令;

       \   输出转义字符;

       [root@localhost proj]# echo '$((13+15))'

       $((13+15))

       [root@localhost proj]# echo "$((13+15))"

       28

       [root@localhost proj]# echo "`expr [2+4]`"

       [2+4]

       注意:在echo命令中使用转义字符时需要加-e选项;

       [root@localhost proj]# echo "a b c d"

a b c d

[root@localhost proj]# echo "a b c % d"

a b c % d

[root@localhost proj]# echo "a\n b\n c\n  d"

a\n b\n c\n  d

[root@localhost proj]# echo "a'\n' b'\n' c'\n'  d"

a'\n' b'\n' c'\n'  d

[root@localhost proj]# echo "a\t b\t c\t d\t"

a\t b\t c\t d\t

[root@localhost proj]# echo -e "a\t b\t c\t d\t"

a      b    c    d   

[root@localhost proj]# echo -e "a\n b\n c\n d\n"

 a

 b

 c

 d

 

5.3.let 计算表达式的值;

       [root@localhost proj]# let sum=49+25

       [root@localhost proj]# echo $sum

       74

 

5.4.bc  进行算术计算,结果取整数;

       #echo "71+5*3"|bc

       [root@localhost proj]# echo "71+5*3"|bc

       86

 

6.字符处理命令

       6.1.seq      输出一串有序的数字;

              #seq 10 20

[root@localhost proj]# seq 10 20

10

20

       6.2. -f  指定输出格式

[root@localhost proj]# seq -f %03g 95 105  以前用数字0来填充;

 

104

105

       6.3. -s  指定分隔符;

[root@localhost proj]# seq -s "  " 10 15

10  11  12  13  14  15

 

练习:计算10005000的和值;

[root@localhost proj]# seq -s "+" 1000 5000 |bc

12003000

 

       6.4. -w  按相同宽度输出,不足自动补零;

[root@localhost proj]# seq -w 8 13

 

       6.5. xargs一起使用,以参数的形式输出;

       #seq 15 25|xargs

[root@localhost proj]# seq 15 25 |xargs

15 16 17 18 19 20 21 22 23 24 25

 

       6.6. tr  字符处理及其转换

              -c  用字符串1的字符补集来替换指定的字符;

练习:输出st文件中的大写字符: [root@localhost proj]# tr -d -c [A-Z]

[root@localhost proj]# tr -d -c [A-Z"\n"]

[root@localhost proj]# tr -d -c [A-Z"\n"]

 

 

 

              -d  删除指定字符串中的指定字符;

[root@localhost proj]# tr -d "A"

 

              -s  删除所有相同连续的字符串,只保留一个字符串;

[root@localhost proj]# tr -s [a-z]

 

[root@localhost proj]# tr -s [a-zA-Z0-9]

 

 

练习:复制文件/etc/hosts/proj目录,然后删除/proj/hosts文件中所有空格;

[root@localhost proj]# tr -d " "

 

#tr "a-z" "A-Z"

[root@localhost proj]# tr "a-z" "A-Z" 把文件st中的所有字符都转换为大写字符;

 

[root@localhost proj]# tr -cs "[a-zA-Z]" "\n"

 

[root@localhost proj]# tr -cs "[a-zA-Z]" "\n"

 

       7.sort 排序命令

       [root@localhost proj]# sort st

       -u   去除重复行,只显示一行

       -f   不区分大小写

       -r   逆序排列

      

       8.按指定的字段进行排序;默认以空格或tab作为分隔符;

       格式:sort + n-m file    表示按从第n字段到第m字段的字符进行排序;

       [root@localhost proj]# sort file

       [root@localhost proj]# sort +2 -3 file

 

       -t   指定分隔符;

       [root@localhost proj]# sort -t: +2 -3 file

      

       -k   指定字段进行排序

       [root@localhost proj]# sort -k3 file

       12 23 34 45

       56 47 78 89

       55 67 89 45

       ab bc cd de

       op pq qr rs

 

       9.uniq   去除重复行

       [root@localhost proj]# uniq file1

       [root@localhost proj]# uniq file1

       aaa bbb ccc

       111 222 333

       aaa bbb ccc

       abc bcd dcf

       -d  显示重复行

       -u  显示没有重复的行

 

[root@localhost proj]# uniq file1 -u      仅仅显示没有重复过的行

aaa bbb ccc

111 222 333

abc bcd dcf

[root@localhost proj]# uniq file1 -d      仅仅显示重复了的行

aaa bbb ccc

[root@localhost proj]# uniq file1 -c      显示重复行的次数;

      1 aaa bbb ccc

      1 111 222 333

      2 aaa bbb ccc

      1 abc bcd dcf

 

10.cut  按列来进行截取文件中的内容;

例如:取出passwd文件中的用户名;

[root@localhost proj]# cut -d: -f1 passwd   

-d:  表示分隔符,-f1 表示取第一列

-b  按字节截取   -c  按字符进行截取   

 

11.grep  过滤指定字符串

是以什么开头的;

是以什么结尾的;

例:显示文件passwd中包含root的行;

[root@schangech proj]# grep root passwd

 

仅显示以root开头的行;

[root@schangech proj]# grep root passwd|grep ^root

root:x:0:0:root:/root:/bin/bash

[root@schangech proj]# grep ^root passwd

root:x:0:0:root:/root:/bin/bash

 

[root@schangech proj]# grep bash$ passwd       bash结尾的行

 

       -v是取反的效果

[root@schangech proj]# grep -v bash$ passwd   不以bash结尾的行,

 

[root@schangech proj]# grep "^$" /etc/httpd/conf/httpd.conf -v 取反不是空行

      

练习:显示文件httpd.conf中所有有效的行;

[root@schangech proj]# grep -v ^# /etc/httpd/conf/httpd.conf

[root@schangech proj]# grep -v ^# "^$" /etc/httpd/conf/httpd.conf

 

[root@schangech proj]# tr -d " "

 

-i  忽略大小写

[root@schangech proj]# grep -i "httpd" httpd.conf

 

-l  显示文件名,在多文件操作时使用

[root@schangech proj]# grep -l "php" *

 

-h  不显示文件名,在多文件操作时使用

[root@schangech proj]# grep -h "php" *

[root@schangech conf.d]# grep -h "h*p" *  显示以h开头,以p结尾,中间包含任意多个字符的文件;

 

-n  显示内容所在行

[root@schangech proj]# grep -n "php" *

[root@schangech conf.d]# grep -n "h*p" *

 

11.wc  统计信息

#wc  -l httpd.conf

[root@schangech conf.d]# wc -l welcome.conf

11 welcome.conf

 -l   统计行

 -c   统计字节数

 -w   统计单词

[root@schangech proj]# wc -l httpd.conf

1009 httpd.conf

[root@schangech proj]# wc -c httpd.conf

34418 httpd.conf

 

12.diff 比较文件

   patch 生成补丁,两者组合使用:

       (打补丁通常是打在源码上面。)

       先比较差异,然后通过弥补差异就一致了;

[root@schangech proj]# diff -u 001 002      比较两个不同文件的区别;

 

[root@schangech proj]# diff -Nur 001 002  如果是目录的,需要添加-rN

 

[root@schangech proj]# diff -u 001 002 >file.patch    先比较不同,然后重定向到一个patch的补丁中;

[root@schangech proj]# ls

001  002  file.patch

[root@schangech proj]# patch < file.patch   然后打补丁;

patching file 001

[root@schangech proj]# ls

001  002  file.patch

[root@schangech proj]# diff -u 001 002             最后可以实验一下,结果是一样的;

 

-P  是去掉目录;

 

补丁恢复:[root@schangech proj]# patch -R < file.patch

阅读(1408) | 评论(2) | 转发(0) |
给主人留下些什么吧!~~

schangech2013-07-17 16:39:15

nathanielwen:这么一天天的学,一天天的记,是一种不错的感觉~

恩,是的。每天都感觉好充实的。

回复 | 举报

nathanielwen2013-07-16 19:18:03

这么一天天的学,一天天的记,是一种不错的感觉~