linux 典型脚本实例

1、文件名大小写转换
   OLDFILE=OLD.FILE
   NEWFILE=`echo $OLDFILE | tr 'A-Z' 'a-z'`


2、文件内容大小写转换
   如将目录TEST下所有文件的文件内容转成小写
   DIR=TEST
   for file in `ls $DIR`
newfile=`echo $file|tr 'A-Z' 'a-z'`
cat $DIR/$file | tr 'A-Z' 'a-z' > $DIR/$newfile
   done


3、转换编码
   iconv -c -f GBK -t UTF-8 $file -o $newfile




4、部分替换,如将delete替换为delete from,但如果原就是delete from,则不变
   如: delete from table1 where x = 1;
       delete table1 where x = 1;
    sed '/ from/!s/delete /delete from/g' --不能使用双引号
    解释: / from/! 是条件,表示若不存在匹配" from",反之 / from/ 就表示存在匹配。
          s/delete /delete from/g 就是将delete 替换为delete from。


5、在匹配行之前之后添加行
   如: This is first line.
        This is last line.
   要在This is last line之前添加一行This is second line. 
   sed '/^.* last line.$/i\This is second line.'
   要在This is last line之后添加一行 This is new last line.
   sed '/^.* last line.$/a\This is new last line.'
 
   解决: i\表示在匹配行之前插入一行, a\表示在匹配行之后追加一行。


6、跨行指定区间匹配
   select top 1 stuid into myid from students
           where age = 17;
   sed -e ":begin; /select top 1/,/;/ { /;/! { $! { N; b begin }; }; s/select top 1 \(.*\);/select \1 limit 1;/; };"


   解释:
   :begin 表示一个跳转的标记点
   /select top 1/,/;/ 表示起始点为 “select top 1",结束点为 “;”
   /;/! 表示条件,不匹配";"
   $!  $表示结束符,在sed中表示文件结束,$!表示文件未结束
   N   表示把下一行追加到缓冲区,即与前一行逻辑上变为一行,实际上换行符仍存在。
   b begin 跳转 begin标记点
   


7、提取指定字符串
   如提取创建trigger语句中的trigger名,动作 所属表名 等
   create or replace trigger "mytrigger" disable 
    after delete on "students"
    for each row
    as 
    declare
    begin
    ...
    end;
    可采用以下脚本
    sed -e ':begin; /create or replace trigger/,/end;/ { /end;/! { $! { N; b begin }; }; s/create or replace trigger "\([_|a-z]\+\)" *\(disable\)*[ |\n]*\([a-z]\+\) \([ |a-z]\+\) on "\(.*\)".*/\1 \2 \3 \4 \5/; };'


    结果: mytrigger disable after delete students


8、注释若干行文件内容 (注意注释的内容中不能出现 "*/",若存在则需要先删除它)
   如
   begin
    ...
   end;
   注释begin到end之间的内容。
   sed '/^begin;/a\\/*'
   sed '/^end;/i\*\/'
   结果如下:
   begin
   /* 
    ...
   */
   end;
  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值