c++清空一个txt文本_Linux下常用文本处理命令大全
Linux中很多文本工具都使用到了正則表達式,正則表達式可以極大的簡化linux系統管理工作,因為網上有很多正則相關的教程,所以這里不再講述,我當時看的是菜鳥的正則表達式,看個一下午在實驗幾遍基本就會了,除了正向肯定預查,反向肯定預查這幾個比較復雜一些,其他都是非常簡單的,很多時候記不住也可以查詢網上對著寫,并不需要你實時記住。這里主要談談awk等用到正則表達式的文本處理工具。
一、awk
awk的指令必須包含在單引號中。
基本句式
awk -F'指定輸入分隔符' 'BEGIN{做一些初始化工作} 一些過濾條件 {針對每行的工作}... END{最后收尾工作}'
中間的處理塊可以有多個,通過過濾條件單每行都會走一遍過濾條件,其中BEGIN和END邊只會執行一遍
過濾記錄
指定分隔符
需要注意的是上面print $1,$3,$6中的,被替換成了分隔符,如果是print $1$3$6則中間沒有分隔符
特殊關鍵字:
正則
輸出到不同的文件
其實使用了 >重定向,上例子使用了if語句
和環境變量的交互
$ x=5 $ y=10$ export y $ echo $x $y5 10$ awk -v val=$x '{print $1, $2, $3, $4+val, $5+ENVIRON["y"]}' OFS="" score.txtMarry 2143 78 89 87Jack 2321 66 83 55Tom 2122 48 82 81Mike 2537 87 102 105Bob 2415 40 62 72二、grep
參數列表:
grep主要就是一個正則表達式的使用,其中需要注意正則有三種BREs、EREs和PREs。前兩種不支持非貪婪匹配。grep默認是BREs,所以他?,+,|,{,},(,)這種字符都需要用轉義,另外他不支持s,S,D,d,等字符。
三、sed
sed命令在自動化腳本編寫的過程還是經常用到的。
基本句式: sed -nfei [操作]
操作: n1,n2 動作
動作:
例子:
四、sort和uniq
sort參數
例子:
uniq參數
需要注意uniq需要文本是有序的,所以一般使用uniq的時候是用更早sort的管道后面
說說sort|uniq 和sort -u,一直覺得很奇怪,兩者有什么區別,功能是一樣的。sort -u是后面加入的,所以很多人還是使用了sort|uniq,目前推薦使用sort -u,因為還少了進程間通訊。
五、實戰
處理以下文件內容,將域名取出并進行計數排序,如處理:
http://www.baidu.com/index.htmlhttp: / / www.baidu.com/1.htmlhttp://post.baidu.com/index.htmlhttp://mp3.baidu.com/index.htmlhttp://www.baidu.com/3.htmlhttp://post.baidu.com/2.html得到如下結果:3 www.baidu.com2 post.baidu.com1 mp3.baidu.com
解法1:grep -Po '(?<=//)(.*?)(?=/)' test.txt |sort |uniq -c|sort -nr
1.利用了Perl,他支持非貪婪,2.利用了正向和反向預查(正向預查是后面的(?=)) 3.利用了-o參數只輸出匹配的內容
解法2:awk -F/ '{print $3}' test.txt |sort |uniq -c|sort -nr
指明了分割符號 直接取對應值
解法3:sed 's/http://([^/]*).*/1/' test.txt|sort |uniq -c|sort -nr
基本的正則中小括號需要轉義,如果采用-r參數即擴展的正則小括號不用轉義
解法4: sed -e 's/http:' -e 's//.*//' | sort | uniq -c | sort -rn
采用了替換,先替換前面的,在替換后面的
awk例子
需要注意awk不支持多維數組,采用了一種變通的方式,普通的使用沒問題,但是如果需要存的值是一個map就不合適了,如下文件 1-6列分別為deal od sum up lj day ,現在要計算sum up lj day 的累加和輸出輸出也要是deal od sum up lj day也就是sum up lj day需要是一個map,不過awk做不到這點
{ updealids:{ od: {day,sum,up,lj} }}awk 'BEGIN{OFS=""}{result[$1,$3,"sum"]+=$4;result[$1,$3,"up"]+=$5;result[$1,$3,"lj"]+=$6;result[$1,$3,"day"]=$2}END{for ( i in result) {split(i, a, SUBSEP); print result[i] ,a[1], a[2], a[3] }}' *總結
以上是生活随笔為你收集整理的c++清空一个txt文本_Linux下常用文本处理命令大全的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android 标题栏进度圈使用方法,A
- 下一篇: linux 其他常用命令