awk sub和gsub區別及用法
awk -F '|' '{sub(/[0-9]+/,"",$2);print $0}' data.test
三。sub和gsub的區別
sub匹配第一次出現的符合模式的字串,相當於 sed 's//' 。
gsub匹配所有的符合模式的字串,相當於 sed 's//g' 。
例如:
awk '{sub(/Mac/,"Macintosh");print}' urfile 用Macintosh替換Mac
awk '{sub(/Mac/,"MacIntosh",$1); print}' file 第一個域內用Macintosh替換Mac
把上面sub換成gsub就表示在滿足條件得域裡面替換所有的字元。
awk的sub函式用法:
sub函式匹配指定域/記錄中最大、最靠左邊的子字串的正規表示式,並用替換字串替換這些字串。
如果沒有指定目標字串就預設使用整個記錄。替換隻發生在第一次匹配的時候。格式如下:
sub (regular expression, substitution string):
sub (regular expression, substitution string, target string)
例項:
$ awk '{ sub(/test/, "mytest"); print }' testfile
$ awk '{ sub(/test/, "mytest", $1); print }' testfile
第一個例子在整個記錄中匹配,替換隻發生在第一次匹配發生的時候。
第二個例子在整個記錄的第一個域中進行匹配,替換隻發生在第一次匹配發生的時候。
如要在整個檔案中進行匹配需要用到gsub
gsub函式作用如sub,但它在整個文件中進行匹配。格式如下:
gsub (regular expression, substitution string)
gsub (regular expression, substitution string, target string)
例項:
$ awk '{ gsub(/test/, "mytest"); print }' testfile
$ awk '{ gsub(/test/, "mytest", $1); print }' testfile
第一個例子在整個文件中匹配test,匹配的都被替換成mytest。
第二個例子在整個文件的第一個域中匹配,所有匹配的都被替換成mytest。
另外, 只有當記錄中的域有改變的時候 ,指定0FS變數才有用, 如果記錄中的域無變化, 指定OFS產生不了實際效果。
awk -F'|' -v OFS='|' '{ gsub(/[0-9]/, "", $3); print $0; }' data.txt
將把第三個域中所有數字都去掉。
另外,對於數字的匹配,可以使用十六進位制。
awk -F'|' -v OFS='|' '{ gsub(/[/x30-/x39]/, "", $3); print $0; }' data.txt
刪除所有空白:(空格、TAB等)【注:三條語句等效】:
[oracle@localhost 201402261951.script]$ echo 'a bc d' | awk '{gsub(/[[:blank:]]/, "",$0)}'
abcd
[oracle@localhost 201402261951.script]$ echo 'a bc d' | awk 'gsub(/[[:blank:]]/, "",$0)'
abcd
【下面這條語句好像只輸出被處理完畢後的那些行,未沒被處理的行,不會輸出。上面的2條命令,不論是否被處理,每行都會被輸出,因為有print $0】
[oracle@localhost 201402261951.script]$ echo 'a bc d' | awk 'gsub(/[[:blank:]]/, "")'
abcd
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/27042095/viewspace-1096916/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- gsub in awk
- Linux 中 awk指令 sub和substr的區別Linux
- Linux中&&和&,|和||用法及區別詳解!Linux
- 一文搞懂Session和Cookie的用法及區別SessionCookie
- ajax與jsonp的區別及用法JSON
- localStorage、sessionStorage、Cookie的區別及用法SessionCookie
- Python中threading的join和setDaemon的區別及用法[例子]Pythonthread
- linux 中 awk語句 getline 和 enxt的區別Linux
- hive中round、floor、ceil區別及用法Hive
- Gerrit的用法及與gitlab的區別Gitlab
- button 和input 的區別及在表單form中的用法ORM
- JS中的!=、== 、!==、=== 的用法和區別JS
- SQLserver-MySQL的區別和用法ServerMySql
- js中!和!!的區別與用法JS
- CSS中的class與id區別及用法CSS
- select into from 和 insert into select 的用法和區別
- JQuery中html()和val()的用法區別jQueryHTML
- Mybatis中updateByPrimaryKeySelective和updateByPrimaryKey的用法區別MyBatis
- Awk常用用法整理
- Linq中 AsQueryable(), AsEnumerable()和ToList()的區別和用法
- C++中break和continue的用法和區別C++
- 【心得】Ctrl+Z、 、 、eof的區別和用法
- Linux中wget、yum與apt-get用法及區別Linuxwgetapt-get
- StretchBlt函式和BitBlt函式的區別和用法函式
- PHP 中 bind 的用法 self 和 static 的區別PHP
- BufferedReader和Scanner的用法和區別(建議多使用BufferedReader)
- CountDownLatch和CyclicBarrier區別及詳解CountDownLatch
- new 和 malloc 的區別 及使用
- DecimalFormat數字格式化用法“0”和“#”的區別DecimalORM
- Rust 中 *、&、mut、&mut、ref、ref mut 的用法和區別Rust
- javascript原始值和引用值型別及區別JavaScript型別
- Python中read()、readline()和readlines()三者間的區別和用法Python
- localStorage,sessionStorage和cookie的區別及使用SessionCookie
- WebGL和OpenGL的區別及關係Web
- 「乾貨」細說 call、apply 以及 bind 的區別和用法APP
- python中 os._exit() 和 sys.exit(), exit(0)的用法和區別Python
- 【Shell】sed xargs grep awk的組合用法
- TCP和UDP的優缺點及區別TCPUDP
- Timer和ScheduledThreadPoolExecutor的區別及原始碼分析thread原始碼