日常shell使用小结

1. linux下文件转码(GB2312转UTF8)
vim打开文件后set fileencoding=utf-8 适用打开单个文件修改的情况
iconv -f GBK -t UTF-8 input -o output 使用iconv转码, 适用脚本中批处理
生成带BOM的UTF8文本
echo -e -n "\xef\xbb\xbf" > file 以二进制方式将BOM标记写到file中, 再将真正的文件内容写入file

 
2. awk使用技巧
awk + regexp
awk也可以使用正则,之前一直没结合试过,今次用了以后才发现方便之处
使用方法:用/包括的内容即正则表达式 与正则表达式比较时需用~表示匹配(!~表示不匹配) 其余同shell下表达式写法
i.e.
打印hisi vo信息,只选取标题与第三通道信息
cat /proc/umap/vo | awk -F\  '{if($1~/[^0-9]+/ || $2=="3")print $0}'
对比下不使用正则的办法
cat /proc/umap/vo | awk -F\  '{if(($1!="0"&&$1!="1"&&$1!="3") || $2=="3")print $0}'
打印hisi vpss信息,只选取标题与第三通道信息 注意退格用\t
cat /proc/umap/vpss | awk -F\  '{if ($1~/[^0-24-9]+/)print "VpssGrp:\t" $0}'
 
awk文档参考: http://www.gnu.org/software/gawk/manual/gawk.html
TIPS:
单独写awk脚本时头部需添加#! /bin/awk -f
分隔符的设置: awk -F xxx 或 awk 'BEGIN{ FS = xxx }...' 前一种注意转义字符的含义,后一种注意要放在BEGIN段
以单个字符分隔: awk -F "" ...
以一行整体分隔: awk -F "\n" ...
输出分隔符: awk 'BEGIN{a=0;b=0;OFS=" "}END{print a, b}' 设置OFS,另外a与b之间加逗号
输出到文件的方法: -dxxx 输出dump信息到xxx(携带awk自带环境变量) print a > "xxx" 将打印输出到xxx,文件名注意双引号引用,如果追加用>>
 
3. vim常用操作
将abc替换为ABCabc
/abc
:s//ABC& 或:s//ABC\0
将abc替换为abcABC
使用例1的方法,或
/abc
:s//\=submatch(0)."ABC" 注意\=表达式只能用在替换字符串起始位置,所以例1未使用此方法 详情见:h :s\=
将abc替换为ABCabABC
没想到好方法,笨办法是先替换为ABCabcABC再替换为ABCabABC
vim批量修改
将以abcxxxABC.c(其中xxx为数字)文件中的svn冲突标记删除(不包含1开头的系列)
:args abc[^1]?*ABC.c
/<<<<<<< .working
:argdo g//d
如果提示未保存,可以先:set hidden 然后:argdo :w
/^=======$ (注意别找到注释里的=======)
:argdo g// .,.+3 d

4. awk中match()函数
1. match函数的使用
三个参数从左到右依次为输入行 正则表达式 匹配子函式(如存在多个子函式则需填入数组)
注意此处子函式的理解是正则表达式的子函式的理解 而非awk那种分隔符的理解
具体以如下代码举例而言deblank[1]是指正则表达式匹配的第一个子函式(即第一个()中内容) deblank[2]是指正则表达式匹配的第二个子函式(即第二个()中内容)
即如果输入是以制表符开始的行则deblank[1]为制表符后内容deblank[2]为空 如果输入是以四个空格开始的行则deblank[1]为空deblank[2]为四个空格后内容
460     while(deblank[1]~/^\t|^\s{4}/){                         |460     while(deblank[1]~/^\t|^\s{4}/){
461         match(deblank[1],/^\t{1}(.*)|^\s{4}(.*)/, deblank);  |461         match(deblank[1],/^\t{1}(.*)|^\s{4}(.*)/, deblank);
462         print"=== " deblank[0]                               |462         print"=== " deblank[0]
463         print"+++ " deblank[1]                               |463         print"+++ " deblank[1]
464         print"--- " deblank[2]                               |464         print"--- " deblank[2]
465         if(deblank[1]==""){                               |465         if(deblank[1]==""){
466             deblank[1]= deblank[2];                          |466             deblank[1]= deblank[2];
467         }                                                     |467             }else{
468                                                               |468             prevline ="&nbsp; " prevline;
469         prevline ="&nbsp; " prevline;                        |469         }
470     }                                                         |

转载于:https://www.cnblogs.com/Five100Miles/p/8460123.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值