檔案處理工具grep,sed,awk等遇到的問題

2021-10-12 12:39:18 字數 3126 閱讀 3806

1、grep中的分組和引用怎麼使用?

基本正則

():將乙個或多個字元**在一起,當做乙個整體處理;

() \1:模式從左側起,第乙個左括號以及與之匹配的右括號之間的模式所匹配到的字元;

擴充套件正則

();()\1;

a|b:表示a或者b

例項

先建立乙個檔案file,取出第一列等於第四列,第二列等於第五列的行

liming 18 nan liming 18

zhangsan 18 nan wangwu 19

zhangsan 18 nan lisi 20

zhangsan 18 nan zhangsan 18

aaa 18 nan aaa 21

輸入命令得出結果:

[root@li ~

]# grep "^\([a-z]\+\>\)[[:space:]]\([[:digit:]]\+\>\).*\1 \2" file

liming 18 nan liming 18

zhangsan 18 nan zhangsan 18

詳細解釋:是正規表示式的分組,首先寫出\(\),第一列為單詞,所以將[a-z]寫出,由於是多個字元所以寫出\+(表示匹配前面的字元一次以上),再進行詞尾錨定,後面有空格,所以輸入[[:space:]],後面加\1(表示匹配第乙個左括號以及與之匹配的右括號之間的模式所匹配到的字元,即第四列)。此時,第一列匹配成功。開始匹配第二列:第二列以數字開始,所以輸入[[:digit:]],再輸入\+,進行詞尾錨定,後面加\2引用,後接file檔案即可。

2、sed的替換操作

s/old/new/

將每行的第乙個old替換為new

s/old/new/3

將每行的第3個old替換為new

s/old/new/g

將所有的old替換為new

3、awk中的自定義變數

(1) -v var=value

(2)在program中直接定義

(1)

# awk -v test='hello gawk' '' /etc/fstab

hello gawk

hello gawk

hello gawk

(2)# awk -f: 'begin ' /etc/passwd

username:root

username:bin

username:daemon

username:adm

匹配/etc/passwd第三域大於1000的顯示出完整資訊

[root@localhost ~

]# awk -f:

''/etc/passwd

列印$5包含root的行

[root@localhost ~

]# awk -f:

'$5~/root/ '

/etc/passwd

root:x:0:

0:root:

/root:

/bin/bash

非精確匹配

[root@localhost ~

]# awk -f:

'$4~/99/ '

/etc/passwd

nobody:x:99:

99:nobody:/:

/sbin/nologin

polkitd:x:

999:

998:user for polkitd:/:

/sbin/nologin

精確匹配

[root@localhost ~

]# awk -f:

'$4=="99" '

/etc/passwd

nobody:x:99:

99:nobody:/:

/sbin/nologin

不匹配:使用『 !

~』[root@localhost ~

]# awk -f:

'$0 !~/99/'

/etc/passwd

設定大小寫

[root@localhost ~

]# awk '/[rr]oot/'

/etc/passwd

匹配第乙個域的第四個字元是't'

[root@localhost ~

]# awk '$1~ /^...t/'

/etc/passwd

[root@localhost ~

]# awk '$1~ /^...t/'

/etc/passwd

root:x:0:

0:root:

/root:

/bin/bash

shutdown:x:6:

0:shutdown:

/sbin:

/sbin/shutdown

halt:x:7:

0:halt:

/sbin:

/sbin/halt

systemd-network:x:

192:

192:systemd network

postfix:x:89:

89::

/var/spool/postfix:

/sbin/nologin

列印出/etc/passwd第三域之和

[root@localhost ~

]# awk -f:

' end'

/etc/passwd

1655

顯示只有四個字元的名,可以用length函式

[root@localhost ~

]# awk -f:

''/etc/passwd

root

sync

halt

mail

顯示所有以乙個r或s開頭的名

[root@localhost ~

]# awk -f:

''/etc/passwd

root

sync

shutdown

systemd-network

Linux文字處理工具(grep sed awk)

文字處理 說明grep c str tmp test 列印符合要求的行的數目。grep i str tmp test 輸出符合要求的行,忽略str大小寫。grep n str tmp test 輸出符合要求的行及行號。grep v str tmp test 輸出不符合要求的行。grep a2 str...

shell檔案處理工具

vim etc resolve.conf 檢視dns 6.shell指令碼命令 1.diff diff file file 比較兩個檔案的不同 c 顯示周圍的行 u 按照一格式統一輸出生成補丁 r 比較兩個目錄中檔案的不同 pattch file file.path 打補丁 b 備份原檔案 2.gr...

檔案處理工具類

public class fileutils if environment.media mounted.equals state dir.isdirectory dir.canwrite return false 複製單個檔案 param oldpath param newpath public s...