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;
  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Shell脚本高级编程教程,希望对你有所帮助。 Example 10-23. Using continue N in an actual task: 1 # Albert Reiner gives an example of how to use "continue N": 2 # --------------------------------------------------------- 3 4 # Suppose I have a large number of jobs that need to be run, with 5 #+ any data that is to be treated in files of a given name pattern in a 6 #+ directory. There are several machines that access this directory, and 7 #+ I want to distribute the work over these different boxen. Then I 8 #+ usually nohup something like the following on every box: 9 10 while true 11 do 12 for n in .iso.* 13 do 14 [ "$n" = ".iso.opts" ] && continue 15 beta=${n#.iso.} 16 [ -r .Iso.$beta ] && continue 17 [ -r .lock.$beta ] && sleep 10 && continue 18 lockfile -r0 .lock.$beta || continue 19 echo -n "$beta: " `date` 20 run-isotherm $beta 21 date 22 ls -alF .Iso.$beta 23 [ -r .Iso.$beta ] && rm -f .lock.$beta 24 continue 2 25 done 26 break 27 done 28 29 # The details, in particular the sleep N, are particular to my 30 #+ application, but the general pattern is: 31 32 while true 33 do 34 for job in {pattern} 35 do 36 {job already done or running} && continue 37 {mark job as running, do job, mark job as done} 38 continue 2 39 done 40 break # Or something like `sleep 600' to avoid termination. 41 done 42 43 # This way the script will stop only when there are no more jobs to do 44 #+ (including jobs that were added during runtime). Through the use 45 #+ of appropriate lockfiles it can be run on several machines 46 #+ concurrently without duplication of calculations [which run a couple 47 #+ of hours in my case, so I really want to avoid this]. Also, as search 48 #+ always starts again from the beginning, one can encode priorities in 49 #+ the file names. Of course, one could also do this without `continue 2', 50 #+ but then one would have to actually check whether or not some job 51 #+ was done (so that we should immediately look for the next job) or not 52 #+ (in which case we terminate or sleep for a long time before checking 53 #+ for a new job).

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值