国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

專題sed & awk & grep

2019-11-08 18:21:38
字體:
來源:轉載
供稿:網友

grep, sed 與 awk 相當有用 !

gerp 查找, sed 編輯, awk 根據內容分析并處理.

 

1.     awk(關鍵字:分析&處理) 

一行一行的分析處理 awk '條件類型1{動作1}條件類型2{動作2}' filename, awk 也可以讀取來自前一個指令的 standard input相對于sed常常用于一整行處理, awk則比較傾向于一行當中分成數個"字段"(區域)來處理, 默認的分隔符是空格鍵或tab鍵例如:last -n 5 | awk '{PRint $1 "/t" $3}' 這里大括號內$1"/t"$3 之間不加空格也可以, 不過最好還是加上個空格, 另外注意"/t"是有雙引號的, 因為本身這些內容都在單引號內$0 代表整行 $1代表第一個區域, 依此類推awk的處理流程是:1. 讀第一行, 將第一行資料填入變量 $0, $1... 等變量中2. 依據條件限制, 執行動作3. 接下來執行下一行所以, AWK一次處理是一行, 而一次中處理的最小單位是一個區域另外還有3個變量, NF: 每一行處理的字段數, NR 目前處理到第幾行 FS 目前的分隔符邏輯判斷 > < >= <= == !== ,賦值直接使用=cat /etc/passwd | awk '{FS=":"} $3<10 {print $1 "/t"$3}' 首先定義分隔符為:, 然后判斷, 注意看, 判斷沒有寫在{}中, 然后執行動作, FS=":"這是一個動作, 賦值動作, 不是一個判斷, 所以不寫在{}中BEGIN END , 給程序員一個初始化和收尾的工作, BEGIN之后列出的操作在{}內將在awk開始掃描輸入之前執行, 而END{}內的操作, 將在掃描完輸入文件后執行.awk '/test/ {print NR}' abc 將帶有test的行的行號打印出來, 注意//之間可以使用正則表達式awk {}內, 可以使用 if else ,for(i=0;i<10;i++),i=1 while(i<NF)可見, awk的很多用法都等同于C語言, 比如"/t"分隔符, print的格式, if, while, for 等等

awk 是相當復雜的工具, 真正使用時, 再補充吧. (有關工具的picture)

 

2.     sed(關鍵字: 編輯)

 以行為單位的文本編輯工具 sed可以直接修改檔案, 不過一般不推薦這么做, 可以分析 standard input基本工作方式: sed [-nef] '[動作]' [輸入文本]-n : 安靜模式, 一般sed用法中, 來自stdin的數據一般會被列出到屏幕上, 如果使用-n參數后, 只有經過sed處理的那一行被列出來.-e : 多重編輯, 比如你同時又想刪除某行, 又想改變其他行, 那么可以用 sed -e '1,5d' -e 's/abc/xxx/g'filename-f : 首先將 sed的動作寫在一個檔案內, 然后通過 sed -f scriptfile 就可以直接執行 scriptfile 內的sed動作 (沒有實驗成功, 不推薦使用)-i : 直接編輯, 這回就是真的改變文件中的內容了, 別的都只是改變顯示. (不推薦使用)動作:a 新增, a 后面可以接字符串, 而這個字符串會在新的一行出現. (下一行)c 取代, c 后面的字符串, 這些字符串可以取代 n1,n2之間的行d 刪除, 后面不接任何東西i 插入, 后面的字符串, 會在上一行出現p 打印, 將選擇的資料列出, 通常和 sed -n 一起運作 sed -n '3p' 只打印第3行s 取代, 類似vi中的取代, 1,20s/old/new/g

[line-address]q 退出, 匹配到某行退出, 提高效率

[line-address]r 匹配到的行讀取某文件 例如: sed '1r QQq' abc , 注意, 寫入的文本是寫在了第1行的后邊, 也就是第2行

[line-address]w file, 匹配到的行寫入某文件  例如: sed -n '/m/w qqq' abc , 從abc中讀取帶m的行寫到qqq文件中, 注意, 這個寫入帶有覆蓋性.

舉例:sed '1d' abc 刪除 abc 檔案里的第一行, 注意, 這時會顯示除了第一行之外的所有行, 因為第一行已經被刪除了(實際文件并沒有被刪除,而只是顯示的時候被刪除了)sed -n '1d' abc 什么內容也不顯示, 因為經過sed處理的行, 是個刪除操作, 所以不現實.sed '2,$d' abc 刪除abc中從第二行到最后一行所有的內容, 注意, $符號正則表達式中表示行末尾, 但是這里并沒有說那行末尾, 就會指最后一行末尾, ^開頭, 如果沒有指定哪行開頭, 那么就是第一行開頭sed '$d' abc 只刪除了最后一行, 因為并沒有指定是那行末尾, 就認為是最后一行末尾sed '/test/d' abc 文件中所有帶 test 的行, 全部刪除sed '/test/a RRRRRRR' abc 將RRRRRRR 追加到所有的帶 test 行的下一行 也有可能通過行 sed '1,5c RRRRRRR' abcsed '/test/c RRRRRRR' abc 將RRRRRRR 替換所有帶 test 的行, 當然, 這里也可以是通過行來進行替換, 比如 sed '1,5c RRRRRRR' abc

3.     grep(關鍵字: 截取) 

文本搜集工具, 結合正則表達式非常強大主要參數 []-c : 只輸出匹配的行-I : 不區分大小寫-h : 查詢多文件時不顯示文件名-l : 查詢多文件時, 只輸出包含匹配字符的文件名-n : 顯示匹配的行號及行-v : 顯示不包含匹配文本的所有行(我經常用除去grep本身)基本工作方式: grep 要匹配的內容 文件名, 例如:grep 'test' d* 顯示所有以d開頭的文件中包含test的行grep 'test' aa bb cc 顯示在 aa bbcc 文件中包含test的行grep '[a-z]/{5}/' aa 顯示所有包含字符串至少有5個連續小寫字母的串


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 会宁县| 梁平县| 仁布县| 沙田区| 额济纳旗| 曲靖市| 张家港市| 嫩江县| 张家界市| 长宁县| 汕头市| 上林县| 甘洛县| 阿勒泰市| 洮南市| 邛崃市| 泰兴市| 岳西县| 瑞金市| 建宁县| 蛟河市| 苗栗县| 芜湖县| 高雄县| 仁化县| 中阳县| 定南县| 揭东县| 靖宇县| 灯塔市| 义马市| 金堂县| 卢氏县| 海南省| 青岛市| 手游| 东明县| 通榆县| 永春县| 信宜市| 泸水县|