awk sed 用法詳解
版權宣告:原創作品,允許轉載,轉載時請務必以超連結形式標明文章 原始出處 、作者資訊和本宣告。否則將追究法律責任。http://jasonyong.blog.違規廣告.com/47753/202531
AWK:awk '/'"$IP"'/{print $1}' $tracert_file | grep -v "tracer"
awk 呼叫系統變數'"變數"'
利用shell作變數替換
CODE:
var=abcd
sed:sed -n "/$var/p" // awk: awk '/'"$var"'/'
num=2
sed: sed -n "${n}p" //awk: awk 'NR=='"$var"''
#sed要用雙引號,awk變數順序單雙$var雙單
反之:sed/awk將變數傳給shell可以用eval, 如sed:sed -n "/$var/p" // awk: awk '/'"$var"'/'
num=2
sed: sed -n "${n}p" //awk: awk 'NR=='"$var"''
#sed要用雙引號,awk變數順序單雙$var雙單
CODE:
eval $(awk 'BEGIN{print "a=ggg b=3"}')
然後
echo $a;echo $b
測試一下
然後
echo $a;echo $b
測試一下
[root@test-linux1 shell]# more 1
1:2:3
4:5:6
[root@test-linux1 shell]# awk 'BEGIN{FS=":";OFS="--"}{print $0}' 1
1:2:3
4:5:6
[root@test-linux1 shell]# awk 'BEGIN{FS=":";OFS="--"}$1=$1' 1
1--2--3
4--5--6
1:2:3
4:5:6
[root@test-linux1 shell]# awk 'BEGIN{FS=":";OFS="--"}{print $0}' 1
1:2:3
4:5:6
[root@test-linux1 shell]# awk 'BEGIN{FS=":";OFS="--"}$1=$1' 1
1--2--3
4--5--6
$1=$1可以讓原來的記錄按照你重新設定的變數FS和OFS重新組合。
awk 使用兩個檔案一起查資料
getline函式也不錯:
http://xb9he.blogchina.com/xb9he/6373001.html
awk的變數:
$0 當前一整條記錄
$1-$n 當前記錄的第N欄位
FILENAME 當前檔名
NF 當前記錄的欄位數目
NR 當前記錄的編號(如果是多個檔案就要疊加,下面有例項)
FNR 當前記錄的編號(有多個檔案,不疊加)
FS 記錄的欄位分割符(-F引數同作用)
OFS 輸出內容的欄位分隔符
RS 輸入內容的記錄分隔符
ORS 輸出內容的記錄分隔符
ARGC 命令列引數的個數
ARGIND 命令列中檔案序號
ARGV 命令列引數陣列
awk 中NR和FNR的區別
awk '{print NR,$0}' 1 2
[root@linux-test1 test]# awk '{print NR,$0}' haha.txt test.txt
1 1 a
2 2 b
3 3 d
4 4 c
5 5 e
6 6 f
7 a 2000
8 b 3000
9 c 1000
10 d 3400
11 e 1232
12 f 3213
NR:到此為止的記錄數
awk '{print FNR,$0}' 1 2
[root@linux-test1 test]# awk '{print FNR,$0}' haha.txt test.txt
1 1 a
2 2 b
3 3 d
4 4 c
5 5 e
6 6 f
1 a 2000
2 b 3000
3 c 1000
4 d 3400
5 e 1232
6 f 3213
FNR:當前檔案的記錄數
awk -F'[()]'
awk 的分割符為“(”或者“)”,以前笨得只會用BEGIN。記住了。
awk -F: '{a[$7]++}END{for(i in a)print i,a[i]}' passwd
寫個陣列的例子,防止忘記
awk '{if($1 ~ /^132.*/ )print $0}' test.txt
如果$1是以132開頭,那麼列印出這行
awk一個常用的函式:
length(str) 返回str的字元個數;如果不帶引數,返回當前記錄的字元個數
int(num) 返回整數部分
index(str1,str2) 返回str2在str1中的位置
split(str,arr,del) 以del為分隔符,將str字串拆分成陣列放入到@arr中,返回元素個數
sprintf(fmt,args) 模仿C中的同名函式
substr(str,pos,len) 返回str中從pos開始長度為len個字元的字串
tolower(str) 將所有大寫字母變成小寫
toupper(str) 將所有小寫字母變成大寫
列印記錄的最後一個欄位:
awk '{print $NF}' passwd
列印最後一行:
awk 'END{print}' passwd
列印最後三行:(如果再多要一些,就多加幾個元素就可以了)
awk -F: 'BEGIN{OFS="\n"}{a[0]=a[1];a[1]=a[2];a[2]=$0}END{print a[0],a[1],a[2]}' passwd
列印最後三行的最後一個欄位:
awk -F: 'BEGIN{OFS="\n"}{a[0]=a[1];a[1]=a[2];a[2]=$NF}END{print a[0],a[1],a[2]}' passwd
SED:
sed '/IP\|ADDR\|NETMASK/n'
sed 的多個條件
替換2,5行:
sed '2,5 c\ ## \是換車,也就是換行字元
asdjfl\
asdlfj\
asdf\
asdf' passwd
不列印第5行:
sed '5 !p' passwd 或者 sed '5 n;p' passwd
在行首插入一個字元:
sed 's/^/#/' passwd 或者 sed 's/^./#&/' passwd ## 注意,不要少了&符號
關於sed的pattern區和hold區:
這兩個概念,說實話,我看明白了兩次(可能),但是不久就會忘記。原因是:1,概念我覺得比較難理解;2,不常用到(我現在實際還沒有用到過。)3,幾個指令太容易記混了
sed有兩個緩衝區,所有命令都工作在Pattern區上,其中保留著sed剛讀入的行。
另外一個Hold區就是用來臨時存放Pattern區資料的。在把Pattern區上的資料放入Hold區之前,Hold區為空。
下面是5個關於Pattern區與Hold區之間交換資料的指令:
G 將一個換行和Hold區中的資料追加到Pattern區中資料之後
g 將Hold區的資料覆蓋到Pattern區中,Pattern區中源資料全丟棄
H 將一個換行符和Pattern區中的資料追加到Hold區資料之後
h 將Pattern區中的資料覆蓋到Hold區,Hold區中的源資料全丟棄
x 交換Pattern區和Hold區中的資料
直接修改檔案內容:
sed -i.bak 's/^./#&/' a ## -i這個知道,是直接編譯檔案的意思。但是後面再加一個.bak,意思就是儲存一個原始檔的副本,副本名是在原檔名後加上.bak字尾(.bak可以任意)
sed一次執行多個操作:
sed '/asldf/{s/a/A/;s/d/D/}' a.bak 或者使用 -e 引數,如下:
sed -e '/asldf/s/a/A/' -e '/asldf/s/d/D/' a.bak
修改後的操作另存為a.a檔案:
sed '/asldf/s/a/A/w a.a' a.bak
字元大小寫轉換:
sed '1,3y/abc/ABC/' newfile
AvdAsC
BAvBdf
CfAedB
d
e
f
本文出自 “jasonyong” 部落格,請務必保留此出處http://jasonyong.blog.違規廣告.com/47753/202531
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/90618/viewspace-622580/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Linux三劍客Awk、Sed、Grep 命令詳解Linux
- Linux 三劍客 Awk、Sed、Grep 命令詳解Linux
- 【Shell】sed xargs grep awk的組合用法
- 效能工具之linux三劍客awk、grep、sed詳解Linux
- sed awk 編輯器
- sed用法
- 指令碼三兄弟 grep、awk、sed指令碼
- Linux sed 命令詳解Linux
- sed指令使用詳解
- Linux awk 命令詳解Linux
- Linux三劍客grep、awk和sedLinux
- sed用法點滴
- Linux sed命令用法Linux
- sed命令語法詳解
- sed 命令詳解及示例
- Linux中awk命令詳解Linux
- linux三劍客(grep、sed、awk)基本使用Linux
- Sed常用用法整理
- Linux命令-Sed用法教程Linux
- 【Linux篇】--sed的用法Linux
- Awk常用用法整理
- Linux命令之grep/sed/awk等行轉列Linux
- Linux重要命之sed命令詳解Linux
- linux系統awk命令使用詳解Linux
- Linux三劍客之awk詳解Linux
- shell程式設計-sed命令詳解(超詳細)程式設計
- 寶付揭秘Linux支付命令操作之grep、sed、awkLinux
- shell指令碼專題-----cat,find,grep,awk,sed(五)指令碼
- sed、awk——運維必須掌握的兩個工具運維
- extern用法詳解
- Metasploit用法詳解
- StringTie用法詳解
- iconfont用法詳解
- JSONP用法詳解JSON
- Linux sed命令常用操作詳解及案例!Linux
- Python self用法詳解Python
- MyBatis Generator 用法詳解MyBatis
- axios的用法詳解iOS
- Flutter ListView 用法詳解FlutterView