日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux隔行打印文本,详解正则表达式及Linux三大文本处理工具

發布時間:2023/12/18 linux 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux隔行打印文本,详解正则表达式及Linux三大文本处理工具 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

grep、sed和awk都是文本處理工具,雖然都是文本處理工具但卻都有各自的優缺點,一種文本處理命令是不能被另一個完全替換的,否則也不會出現三個文本處理命令了。

一、正則表達式

1、匹配字符的類型

[a-z]:小寫字母

[A-Z]:大寫字母

[a-Z]:小或大寫字母

[0-9]:數字

[a-zA-Z0-9]:表示匹配一個為字母或數字的字符

. :匹配1個任意字符,空格除外

[0-f]:16進制數

abc | def:abc或def

a (bc | de) f:abcf 或 adef

\

\>:單詞尾

[^表達式]:除小寫字母以外的所有字符,如此類推。

2、后跟以下符號控制匹配的數量

此類符號的左側要有上面第一點的表達式

表達式*:0或n個字符

表達式+:1或n個字符

表達式?:0或1個字符

表達式{n}:n個字符

表達式{n:m}:n到m個字符

表達式{n,}:至少n個字符

【例】[a-z]*表示匹配0個或多個小寫字母

3、將匹配的字符控制在頭尾

^表達式:頭部符合

表達式$:尾部符合

二、Linux三大文本處理工具

1、egrep 篩選工具

grep的擴展版,可以使用正則表達式

語法:

egrep -選項? '正則表達式'? 文件名

選項:

-n :顯示行號

-o :只顯示匹配的內容

-q :靜默模式,沒有任何輸出,得用$?來判斷執行成功沒有,即有沒有過濾到想要的內容

-l :如果匹配成功,則只將文件名打印出來,失敗則不打印,通常-rl一起用,grep -rl 'root' /etc

-A :如果匹配成功,則將匹配行及其后n行一起打印出來

-B :如果匹配成功,則將匹配行及其前n行一起打印出來

-C :如果匹配成功,則將匹配行及其前后n行一起打印出來

--color

-c :如果匹配成功,則將匹配到的行數打印出來

-i :忽略大小寫

-v :取反,不匹配

-w:匹配單詞

2、sed 流編輯器

語法:

語法1:sed? -選項? '數字定位+命令'? 文件名

選項:

-n:靜默模式,不輸出

-e:多項編輯,這個不是很清楚

-i:直接修改文件內容,而不是輸出

-r:擴展模式,可使用正則表達式

-f:指定文件名,將動作寫在新的文件內

命令:

a ∶ 追加append,

c ∶ 改變change,

d ∶ 刪除delete,

i ∶ 插入insert, i 的后面可以接字串,而這些字串會在新的一行出現(目前的上一行)

p∶ 列印print

s∶ 取代substitute,可以直接進行替換的工作。通常這個 s 的動作可以搭配正則表達式。例如 1,20s/old/new/g

*s命令特別說明:

使用{命令1:命令2:命令3}可增加使用多個命令

語法2:sed? -r? '替換命令s/正則表達式/替換內容/貪婪選項g'? 文件名

定位的兩種方法:

①數字定位(輸入行序號定位)

十進制數

1:單行

1,3:范圍 從第一行到第三行

2,+4:匹配行后若干行

4,~3:從第四行到下一個3的倍數行

2~3:第二行起每間隔三行的行

$:尾行

1!:除了第一行以外的行

【例】sed -n '1p' /etc/passwd

②正則表達式定位

正則必須用//包裹起來

擴展正則需要用 -r 參數或轉義

替換可使用正則表達式的子模式,即小括號(),可以\1、\2代表子模式

【例】sed -r 's/(.)(.)/\2\1/ file1 表示將匹配到的第一部分和第二部分替換

*貪婪選項:填上g,代表把一行中所有匹配項替換

3、awk 文本分析工具

由命令、正則(需要用//包圍起來)、比較和關系運算組合而成

使用option中的-F參數定義間隔符號

用$1,$2,$3等的順序表示files中每行以間隔符號分隔的各列不同域,NF變量表示當前記錄的字段數

語法

awk -選項 參數? '邏輯判斷{命令 變量1,變量2,變量3}' 文件名

選項

-F 定義字段分隔符,默認的分隔符是連續的空格或制表符

-v 定義變量并賦值 也可以借用次方式從shell變量中引入

AWK變量

NR 當前記錄的個數(全部文件連接后的統計)

FNR 當前記錄的個數(僅為當前文件的統計,非全部)

FS 字段分隔符 默認為連續空格或制表符,可以使用多個不同的符號做分隔符 -F[:/]

OFS 輸出字符的分隔符 默認是空格

# awk -F: 'OFS="=====" {print $1,$2}' /etc/passwd

root=====x

NF 當前讀入行的字段個數

ORS 輸出記錄分隔符 默認是換行

# awk -F: 'ORS="=====" {print $1,$2}' /etc/passwd

root x=====bin x=====

FILENAME 當前文件名

【例1】使用AWK變量

# awk '{print NR,FNR,$1}' file1 file2

1 1 aaaaa

2 2 bbbbb

3 3 ccccc

4 1 dddddd

5 2 eeeeee

6 3 ffffff

#

【例2】引用shell變量的方法

# a=root

# awk -v var=$a -F: '$1 == var {print $0}' /etc/passwd

或者 把整個命令拆開傳遞,讓shell變量外露,

# awk -F: '$1 == "'$a'" {print $0}' /etc/passwd

# a=NF

# awk -F: '{print $'$a'}' /etc/passwd

邏輯運算(可直接引用域進行運算)

= += -= /= *= 賦值

&& || ! 邏輯與 邏輯或 邏輯非

~ !~? 匹配正則或不匹配,正則需要用 /正則/ 包圍住

< <= > >= != ==? 關系 比較字符串時要把字符串用雙引號引起來

$ 字段引用:字段引用需要加$,而變量引用直接用變量名取

+ - * / % ++ --? 運算符

轉義序列

\\ \自身

\$ 轉義$

\t 制表符

\b 退格符

\r 回車符

\n 換行符

\c 取消換行

以上所述是小編給大家介紹的正則表達式及Linux三大文本處理工具,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對微學網網站的支持!

這就是微學網-程序員之家為你提供的"詳解正則表達式及Linux三大文本處理工具"希望對你有所幫助.本文來自網絡,轉載請注明出處:http://www.weixuecn.cn/article/12255.html

總結

以上是生活随笔為你收集整理的linux隔行打印文本,详解正则表达式及Linux三大文本处理工具的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。