文本三劍客之grep命令和awk命令 1.0 版本

grep + awk

  • 1.grep命令
    • 1.1 基本格式
    • 1.2 常用選項
  • 2.awk命令
    • 2.1 awk工作原理
    • 2.2 awk命令格式
    • 2.3 awk常用內置變量

1.grep命令

1.1 基本格式

grep [選項]… 查找條件 目標文件


1.2 常用選項

選項功能
-m [ x ]匹配x次 后停止,x為具體數字
-v取反
-i忽略字符大小寫
-n顯示匹配的 行號
-c統計匹配的行數
-o 僅顯示匹配到的字符串
-q靜默模式,不輸出任何信息
-A x after匹配內容的后x行
-B x before前x行
-C x context前后各x行
-e實現多個選項間的邏輯or關系
-w匹配 整個單詞
-E 使用擴展正則表達式,相當于egrep
-F不支持正則表達式,相當于fgrep
-r遞歸目錄,但不處理軟鏈接
-R遞歸目錄,但處理軟鏈接
-f filefile 根據模式文件,處理兩個文件相同內容 把第一個文件作為匹配條件
-color=auto對匹配到的文本著色顯示
-m  匹配#次后停止grep -m 1 root /etc/passwd   #多個匹配只取第一個

在這里插入圖片描述

-v 取反grep -Ev '^[[:space:]]*#|^$' /etc/fstab#非空行

在這里插入圖片描述

-c 統計匹配的行數grep -c root /etc/passwd    #統計匹配到的行數

在這里插入圖片描述

-A x after 匹配內容的后x行 grep -A3 root /etc/passwd   #匹配到的行后3行業顯示出來

在這里插入圖片描述

-e 實現多個選項間的邏輯or關系grep -e root -e bash /etc/passwd #包含root或者包含bash 的行grep -E root|bash  /etc/passwd #使用擴展正則表達式的寫法

在這里插入圖片描述

-w 匹配整個單詞grep -w root /etc/passwd

在這里插入圖片描述

2.awk命令

2.1 awk工作原理

+-----------------+
|    輸入文件     |
|    或標準輸入   |
+-----------------+|v
+-----------------+
|   分割輸入行    |
+-----------------+|v
+-----------------+
|    匹配模式     |
+-----------------+|v
+-----------------+
|    執行動作     |
+-----------------+|v
+-----------------+
|   處理下一行    |
+-----------------+|v循環結束
  1. 讀取輸入:AWK首先讀取輸入文件或從標準輸入接收輸入;

  2. 分割輸入:AWK默認將輸入行分割成字段,并使用空格或制表符作為字段分隔符;

  3. 匹配模式:AWK使用模式匹配來確定需要處理的行,可以使用正則表達式或其他條件來指定匹配的行。如果沒有指定模式,AWK將默認匹配所有行;

  4. 執行動作:當輸入行與模式匹配時,AWK執行相應的動作;

  5. 處理下一行:一旦完成當前行的處理,AWK繼續處理下一行,重復上述步驟。

2.2 awk命令格式

awk默認使用正則表達式 所以不需要\

#命令格式#
awk [選項] '[模式匹配條件]{操作 }'  文件1 文件2..
#選項##一般只有-F常用
-F  指定分隔符,默認的分隔符是若干個連續空白符,默認的時候可不寫
-v  自定義變量
-f  腳本awk '/匹配條件/{ print $x }'#匹配條件可以不寫 x為任意數字
#模式匹配條件格式#/    匹配條件       / 
# 起始               結束    
#/  / 一定要加 
#操作#
#常用的 只有 print awk  '{ print $1  }'awk '{ print $1 $2 $3 .... }'#awk會自動壓縮空格,不需要再寫tr -s '  '

2.3 awk常用內置變量

內置變量功能
FS指定每行文本的字段分隔符,缺省為空格或制表符(tab)。與 “-F”作用相同 -v “FS=:”
OFS輸出時的分隔符
NF當前處理的行的字段個數
NR當前處理的行的行號(序數)
$0當前處理的行的整行內容
$n當前處理行的第n個字段(第n列)
FILENAME被處理的文件名
RS行分隔符。awk從文件上讀取資料時,將根據RS的定義就把資料切割成許多條記錄,而awk一次僅讀入一條記錄進行處理。預設值是\n
###########  FS  #################
[root@localhost ky15]#awk -v FS=':' '{print $1FS$3}' /etc/passwd
#此處FS 相當于于變量  -v 變量賦值  相當于 指定: 為分隔符  
[root@localhost ky15]#awk -F: '{print $1":"$3}' /etc/passwdshell中的變量
[root@localhost ky15]#fs=":";awk -v FS=$fs '{print $1FS$3}' /etc/passwd
#定義變量傳給FS#########   支持變量    ##################
[root@localhost ky15]#fs=":";awk -v FS=$fs -v OFS="+" '{print $1,$3}' /etc/passwd
#輸出分隔符-F  -FS一起使用  -F 的優先級高############   OFS    ##########
[root@localhost ~]#awk -v FS=':' -v OFS='==' '{print $1,$3}' /etc/passwd
root==0
bin==1
daemon==2
adm==3
lp==4
sync==5########   RS    #######       
默認是已 /n (換行符)為一條記錄的分隔符
不動他
[root@localhost ~]#echo $PATH | awk -v RS=':' '{print $0}'
/usr/local/sbin
/usr/local/bin
/usr/sbin
/usr/bin
/root/bin##################   NF  ###################
代表字段的個數
[root@localhost ky15]#awk -F: '{print NF}' /etc/passwd[root@localhost ky15]#awk -F: '{print $NF}' /etc/passwd
#$NF最后一個字段[root@localhost ky15]#df|awk -F: '{print $(NF-1)}'
#倒數第二行
[root@localhost ky15]#df|awk -F "[ %]+" '{print $(NF-1)}'################    NR    ######################
行號
[root@localhost ky15]#awk '{print $1,NR}' /etc/passwd
##行號
[root@localhost ky15]#awk 'NR==2{print $1}' /etc/passwd
#只取第二行的第一個字段
[root@localhost ky15]#awk 'NR==1,NR==3{print}' passwd 
#打印出1到3 行
[root@localhost ky15]#awk 'NR==1||NR==3{print}' passwd
#打印出1和3行
[root@localhost ky15]#awk '(NR%2)==0{print NR}' passwd
#打印出函數取余數為0行
[root@localhost ky15]#awk '(NR%2)==1{print NR}' passwd
#打印出函數取余數為1的行
[root@localhost ky15]#awk 'NR>=3 && NR<=6{print NR,$0}' /etc/passwd[root@localhost ky15]#seq 10|awk 'NR>5 && NR<10'
#取 行間
6
7
8
9
[root@localhost ky15]#awk '$3>1000{print}' /etc/passwd
#注意分隔符
#打印出普通用戶 第三列 大于1000 的行################ FNR  ############
[root@localhost data]#cat /etc/issue |wc -l
3
[root@localhost data]#cat /etc/os-release |wc -l
16
[root@localhost data]#awk '{print FNR}' /etc/issue /etc/os-release 
1
2
3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16################ FILENAME ############
[root@localhost ~]#awk -F: 'NR==2{print FILENAME}' /etc/passwd
/etc/passwd

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/34973.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/34973.shtml
英文地址,請注明出處:http://en.pswp.cn/news/34973.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Dynamic CRM開發 - 實體介紹

實體簡介 在CRM中,實體(Entity)是數據的基本載體,也是構建業務邏輯網絡的基礎節點。 實體可以理解為數據庫中的一張表(實體中的字段對應數據庫表的字段),比如創建一個實體存儲客戶信息,創建一個實體存儲產品信息,產品實體里可以創建一個查找類型的字段(類似表的外鍵)…

【Express.js】集成RabbitMQ

集成RabbitMQ 本節我們介紹在 express.js 中集成 rabbitmq. RabbitMQ 是一個消息隊列中間件&#xff0c;常用于請求削峰&#xff0c;事務的隊列處理&#xff0c;事件訂閱機制的實現等。 準備工作 創建一個 express.js 項目&#xff08;本文基于evp-express-cli&#xff09;…

【三維編輯】Seal-3D:基于NeRF的交互式像素級編輯

文章目錄 摘要一、引言二、方法2.1.基于nerf的編輯問題概述2.2.編輯指導生成2.3.即時預覽的兩階段學生訓練 三、實驗四、代碼總結 項目主頁: https://windingwind.github.io/seal-3d/ 代碼&#xff1a;https://github.com/windingwind/seal-3d/ 論文: https://arxiv.org/pdf/23…

創建一個Spring Boot項目

安裝所需軟件&#xff1a;首先確保你的計算機上已經安裝了Java JDK和Maven構建工具。你可以從官方網站下載并按照說明進行安裝。 創建一個新的Spring Boot項目&#xff1a;在命令行或終端中使用Maven命令創建一個新的Spring Boot項目。執行以下命令&#xff1a;mvn archetype:…

阿里云輕量應用服務器_2核4G4M_2核2G3M_性能測評

阿里云輕量應用服務器2核2G3M帶寬108元一年&#xff0c;系統盤為50GB高效云盤&#xff1b;輕量服務器2核4G4M帶寬&#xff0c;60GB高效云盤297.98元12個月。目前輕量應用服務器只有2核2G和2核4G有活動&#xff0c;阿里云百科分享阿里云輕量應用服務器入口&#xff1a; 目錄 阿…

【Qt高階】老Qt都不一定清楚的“QObject線程親和性”【2023.08.13】

老Qt都不一定清楚的“線程親和性” 與題目無關 感覺自己還挺2&#xff0c;有粉絲點了那個契約者會給up發個鼓勵的話&#xff0c;我還以為是人私信發的&#xff0c;都挨個感謝了&#xff0c;后來才意識到是系統自動發的&#x1f623;&#x1f623;&#x1f623;。 自上上期視頻對…

Three.js陰影

目錄 Three.js入門 Three.js光源 Three.js陰影 Three.js紋理貼圖 使用燈光后&#xff0c;場景中就會產生陰影。物體的背面確實在黑暗中&#xff0c;這稱為核心陰影&#xff08;core shadow&#xff09;。我們缺少的是落下的陰影&#xff08;drop shadow&#xff09;&#…

【數據結構】——棧、隊列的相關習題

目錄 題型一&#xff08;棧與隊列的基本概念&#xff09;題型二&#xff08;棧與隊列的綜合&#xff09;題型三&#xff08;循環隊列的判空與判滿&#xff09;題型四&#xff08;循環鏈表表示隊列&#xff09;題型五&#xff08;循環隊列的存儲&#xff09;題型六&#xff08;循…

一文揭秘餓了么跨端技術的演進、實踐與落地

跨端技術背景與演進歷程 跨端&#xff0c;究竟跨的是哪些端&#xff1f; 自 90 年的萬維網出現&#xff0c;而后的三十多年&#xff0c;我們依次經歷了 PC 時代、移動時代&#xff0c;以及現在的萬物互聯&#xff08;的 IoT &#xff09;時代&#xff0c;繁榮的背后&#xff…

【Apollo】Apollo-ros版本架構學習與源碼分析

&#x1f60f;★,:.☆(&#xffe3;▽&#xffe3;)/$:.★ &#x1f60f; 這篇文章主要介紹Apollo-ros版本架構學習與源碼分析。 無專精則不能成&#xff0c;無涉獵則不能通。——梁啟超 歡迎來到我的博客&#xff0c;一起學習&#xff0c;共同進步。 喜歡的朋友可以關注一下&a…

微信小程序如何自定義分享卡片文案和圖片

微信小程序提供了onShareAppMessage方法&#xff0c;專門用來監聽用戶點擊頁面內轉發按鈕&#xff08;button 組件 open-type"share"&#xff09;或右上角菜單“轉發”按鈕的行為&#xff0c;并自定義轉發內容。 > 注意&#xff1a;只有定義了此事件處理函數&…

Android studio 設置安卓手機

參考這個鏈接 ghttps://developer.android.com/studio/debug/dev-options 列出常用手機的設置&#xff0c;但是我的手機不在此列 Google Pixel Settings > About phone > Build number Samsung Galaxy S8 and later Settings > About phone > Software informa…

git: ‘lfs‘ is not a git command. see ‘git --help‘

在克隆hugging face里面的項目文件的時候&#xff0c;需要用到git lfs&#xff0c;本文介紹安裝git lfs方法 在Ubuntu下 curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | sudo bash sudo apt-get install git-lfs在Windows下 到這個鏈…

解決GitHub的速度很慢的幾種方式

1. GitHub 鏡像訪問 這里提供兩個最常用的鏡像地址&#xff1a; https://hub.njuu.cf/search https://www.gitclone.com/gogs/search/clonesearch 也就是說上面的鏡像就是一個克隆版的 GitHub&#xff0c;你可以訪問上面的鏡像網站&#xff0c;網站的內容跟 GitHub 是完整同步…

期權定價模型系列【4】—期權組合的Delta-Gamma-Vega中性

期權組合的Delta-Gamma-Vega中性 期權組合構建時往往會進行delta中性對沖&#xff0c;在進行中性對沖后&#xff0c;期權組合的delta敞口為0&#xff0c;此時期權組合仍然存在gamma與vega敞口。因此研究期權組合的delta-gamma-vega敞口中性是有必要的。 本文旨在對delta-gamma-…

關于新手學習STM32開發應該如何入門?

對于新手來說&#xff0c;學習STM32開發可能會感到困惑&#xff0c;尤其是在拿到開發板后該如何入門。在這里有嵌入式學習路線&#xff0c;畢設&#xff0c;各種項目&#xff0c;需要留個6。以下是部分內容概述&#xff1a;硬件介紹&#xff1a;了解STM32開發板的基本硬件組成和…

Springboot 默認路徑說明

Spring Boot基本上是Spring框架的擴展&#xff0c;它消除了設置Spring應用程序所需的樣板配置&#xff0c;極大的方便了開發者&#xff0c;其默認識別路徑如下&#xff1a; Spring Boot 作為Spring默認將 /** 所有訪問映射到以下目錄&#xff1a; 1、classpath:/static 用于加…

【密碼學】穴居人密碼

穴居人密碼 文字記載中&#xff0c;有時會把來自古希臘文化之前的各種記錄作為密碼學的例子&#xff0c;但稱它們為密碼學一定太不嚴格了&#xff0c;這是因為那些方法都太原始了。密碼學的起源能追溯到多早&#xff0c;取決于你把密碼學的相關定義確定得有多寬泛。大多數作者都…

每日后端面試5題 第四天

1. 線程池的核心參數&#xff08;高薪常問&#xff09; &#xff08;1&#xff09;corePoolSize&#xff1a;核心線程個數 &#xff08;2&#xff09;maximumPoolSize&#xff1a;最大線程個數 &#xff08;3&#xff09;keepAliveTime&#xff1a;最大存活時間 &#xff0…

如何在Vue中進行單元測試?什么是Vue的模塊化開發?

1、如何在Vue中進行單元測試&#xff1f; 在Vue中進行單元測試可以提高代碼的可維護性和可讀性&#xff0c;同時也能夠幫助開發者更快地找到代碼中的問題和潛在的錯誤。下面是一些在Vue中進行單元測試的步驟&#xff1a; 安裝單元測試工具 首先需要安裝一個單元測試工具&…