日常shell使用小结
生活随笔
收集整理的這篇文章主要介紹了
日常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
使用方法:用/包括的內容即正則表達式 與正則表達式比較時需用~表示匹配(!~表示不匹配) 其余同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 =" " prevline;
469???????? prevline =" " prevline;??????????????????????? |469???????? }
470???? }???????????????????????????????????????????????????????? |
轉載于:https://www.cnblogs.com/Five100Miles/p/8460123.html
總結
以上是生活随笔為你收集整理的日常shell使用小结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【372天】我爱刷题系列131(2018
- 下一篇: NoHttpResponseExcept