sed

bash �Cn file.sh #检查脚本有无错误

bash �Cx file.sh #脚本执行中输出,检查有无错误,单步执行

 

定义脚本退出状态码

exit:退出脚本

exit #

没能指定退出状态码,最后一条命令为脚本退出状态码

 

特殊变量

$? 执行上次的命令

$* 参数列表

$# 参数的个数

$@ 参数列表

位置变量

$1,$2

shift 时就自动换掉一个参数

$ help shift
shift: shift [n]
    Shift positional parameters.

    Rename the positional parameters $N+1,$N+2 ... to $1,$2 ...  If N is
    not given, it is assumed to be 1.

    Exit Status:
    Returns success unless N is negative or greater than $#.

 

$# 参数的个数

if [ $# �Clt 2 ]; then

echo “cacl.sh arg1 arg2”

exit 8

fi

echo “the sum is $[$1+$2]’'

sed 流编辑器,awk

sed 基本用法

sed : Stream EDitor     流编辑器

sed : 模式空间

默认不编辑原文件,仅对模式空间中的数据做处理

Usage: sed [OPTION]... {script-only-if-no-other-script} [input-file]...

  -n, --quiet, --silent
                 suppress automatic printing of pattern space
  -e script, --expression=script
                 add the script to the commands to be executed
  -f script-file, --file=script-file
                 add the contents of script-file to the commands to be executed
  -i[SUFFIX], --in-place[=SUFFIX]
                 edit files in place (makes backup if extension supplied)
  -c, --copy
                 use copy instead of rename when shuffling files in -i mode
                 (avoids change of input file ownership)
  -l N, --line-length=N
                 specify the desired line-wrap length for the `l' command
  --posix
                 disable all GNU extensions.
  -r, --regexp-extended
                 use extended regular expressions in the script.
  -s, --separate
                 consider files as separate rather than as a single continuous
                 long stream.
  -u, --unbuffered
                 load minimal amounts of data from the input files and flush
                 the output buffers more often
      --help     display this help and exit
      --version  output version information and exit

sed 'AddressCommand' file  地址加命令 sed '1,2d' /etc/inittab

sed '3,$d' /etc/inittab

1、StartLine,EndLine
    比如1,100
    $ 最后一行
2、/RegExp/
    /^root/
3、/pattern1/,/pattern2/
    第一冷饮被pattern1匹配的行开始,至第一次被pattern2 匹配到的行结束,这中间的所有行
4、LineNumber
    指定的行
5、StartLine, +N
    从startLine开始,向后的N行:
sed 'AddressCommand' file
    -n:静默模式,不再默认显示模式空间中的内容
    -i:直接修改原文件
    -e script -e script :可以同时执行多个脚本
    -f /path/to/se_cript

Command:
    d: 删除符合条件的行
    p:显示符合条件的行
    a \string :在指定的行后面追加字符
    i  \string :在指定的行后面插入字符
    r file :将指定文件的内容添加至符合条件处
    w file :将指定范围的内容保存到指定位置
    s/pattern/string/:  查找并替换
                 g:全局替换
                 i:忽略字符大小写
                s///:s###,s@@@ 分割符,可以多种      

[root@localhost shsh]# sed '/^\//p' /etc/fstab
/dev/VolGroup00/LogVol00 /                       ext3    defaults        1 1
/dev/VolGroup00/LogVol00 /                       ext3    defaults        1 1
LABEL=/boot             /boot                   ext3    defaults        1 2
tmpfs                   /dev/shm                tmpfs   defaults        0 0
devpts                  /dev/pts                devpts  gid=5,mode=620  0 0
sysfs                   /sys                    sysfs   defaults        0 0
proc                    /proc                   proc    defaults        0 0
/dev/VolGroup00/LogVol01 swap                    swap    defaults        0 0
/dev/VolGroup00/LogVol01 swap                    swap    defaults        0 0

[root@localhost shsh]# sed '/^\//a \#hello world' /etc/fstab | head -4
/dev/VolGroup00/LogVol00 /                       ext3    defaults        1 1
#hello world
LABEL=/boot             /boot                   ext3    defaults        1 2
tmpfs                   /dev/shm                tmpfs   defaults        0 0

[root@localhost shsh]# sed -n '/root/w /tmp/w.txt' /etc/passwd
[root@localhost shsh]# more /tmp/w.txt
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

[root@localhost shsh]# sed 's/oot/OOT/' /etc/passwd
rOOT:x:0:0:root:/root:/bin/bash

s///:s###,s@@@ 分割符,可以多种      

[root@localhost shsh]# sed 's@/@#@g' /etc/fstab
#dev#VolGroup00#LogVol00 #                       ext3    defaults        1 1
LABEL=#boot             #boot                   ext3    defaults        1 2
tmpfs                   #dev#shm                tmpfs   defaults        0 0
devpts                  #dev#pts                devpts  gid=5,mode=620  0 0
sysfs                   #sys                    sysfs   defaults        0 0
proc                    #proc                   proc    defaults        0 0
#dev#VolGroup00#LogVol01 swap                    swap    defaults        0 0

[root@localhost shsh]# more sed.txt
hello world ,i love you

[root@localhost shsh]# sed 's#l..e#&r#g' sed.txt
hello world ,i lover you

练习
1、删除/etc/grub.conf 文件中行首的空白符
2、替换/etc/inittab 文件中"id:3:initdefault:" 一行中的数字为5
3、删除/etc/inittab文件中的空白行
4、删除/etc/inittab文件中的开头#号
5、删除某文件中开头的#号及后的空白字符,但要求#号后面必须有空白字符
6、删除某文件中以空白字符后面跟#类的行中的开头的空白字符及#
7、取出一个文件路径的目录名称

你可能感兴趣的:(操作系统,sed)