Linux中grep、sed和awk常見用法總結

1.概述

Linux系統下,grep、sed和awk三個命令是最常用的、非常強大的文本處理工具,可以用于搜索、替換、過濾、排序等多種操作,掌握這三種工具的用法,可以大大提高我們在Linux下處理文本的效率。

2.grep命令

grep是一種非常常見的文本搜索工具,它可以搜索指定字符串在一個或多個文件中出現的行,并將結果輸出到標準輸出。語法格式如下:

grep?[OPTIONS] PATTERN [FILE…]

其中,OPTIONS表示選項,PATTERN表示要搜索的模式,FILE表示要搜索的文件名。

grep命令的常見選項包括:

  1. ?-i:忽略大小寫
  2. ?-w:完全匹配
  3. ?-v:顯示不匹配的行
  4. ?-n:顯示行號
  5. ?-c:顯示匹配行的數量
  6. ?-r:遞歸搜索子目錄
  7. ?-e:搜索多個字符串

詳細選項參數及其含義可以通過“grep --help”獲取,具體如下:

[test@localhost ~]$ grep --help

用法:?grep [選項]... 模式 [文件]...

在每個<文件>中查找給定<模式>

例如:grep -i 'hello world' menu.h main.c

<模式>可以包括多個模式字符串,使用換行符進行分隔。

模式選擇與解釋:

??-E, --extended-regexp ????<模式> 是擴展正則表達式

??-F, --fixed-strings ???????<模式> 是字符串

??-G, --basic-regexp ???????<模式> 是基本正則表達式

??-P, --perl-regexp ?????????<模式> 是 Perl 正則表達式

??-e, --regexp=<模式> ??????用指定的<模式>字符串來進行匹配操作

??-f, --file=<文件> ?????????從給定<文件>中取得<模式>

??-i, --ignore-case ??????????在模式和數據中忽略大小寫

??????--no-ignore-case ??????不要忽略大小寫(默認)

??-w, --word-regexp ?????????強制<模式>僅完全匹配字詞

??-x, --line-regexp ???????????強制<模式>僅完全匹配整行

??-z, --null-data ?????????????數據行以一個 0 字節結束,而非換行符

雜項:

??-s, --no-messages ????????不顯示錯誤信息

??-v, --invert-match ????????選中不匹配的行

??-V, --version ????????????顯示版本信息并退出

??????--help ???????????????顯示此幫助并退出

輸出控制:

??-m, --max-count=<次數> ???得到給定<次數>次匹配后停止

??-b, --byte-offset ?????????輸出的同時打印字節偏移

??-n, --line-number ????????輸出的同時打印行號

??????--line-buffered ??????每行輸出后刷新輸出緩沖區

??-H, --with-filename ??????為輸出行打印文件名

??-h, --no-filename ????????輸出時不顯示文件名前綴

??????--label=<標簽> ???????將給定<標簽>作為標準輸入文件名前綴

??-o, --only-matching ??????只顯示行中非空匹配部分

??-q, --quiet, --silent ???????不顯示所有常規輸出

??????--binary-files=TYPE ???設定二進制文件的 TYPE(類型);

????????????????????????????TYPE 可以是 'binary'、'text' 或 'without-match'

??-a, --text ?????????????????等同于 --binary-files=text

??-I ???????????????????????等同于 --binary-files=without-match

??-d, --directories=ACTION ???讀取目錄的方式;

????????????????????????????ACTION 可以是`read', `recurse',或`skip'

??-D, --devices=ACTION ?????讀取設備、先入先出隊列、套接字的方式;

????????????????????????????ACTION 可以是`read'或`skip'

??-r, --recursive ??????????????等同于--directories=recurse

??-R, --dereference-recursive ??????同上,但遍歷所有符號鏈接

??????--include=GLOB ????????search only files that match GLOB (a file pattern)

??????--exclude=GLOB ???????skip files that match GLOB

??????--exclude-from=FILE ????skip files that match any file pattern from FILE

??????--exclude-dir=GLOB ?????skip directories that match GLOB

??-L, --files-without-match ????只打印沒有匹配上的<文件>的名稱

??-l, --files-with-matches ?????只打印有匹配的<文件>的名稱

??-c, --count ???????????????只打印每個<文件>中的匹配行數目

??-T, --initial-tab ????????????行首制表符對齊(如有必要)

??-Z, --null ?????????????????在<文件>名最后打印空字符

文件控制:

??-B, --before-context=NUM ????打印文本及其前面NUM 行

??-A, --after-context=NUM ?????打印文本及其后面NUM 行

??-C, --context=NUM ?????????打印NUM 行輸出文本

??-NUM ?????????????????????等同于 --context=NUM

??????--color[=WHEN],

??????--colour[=WHEN] ??????使用標記高亮匹配字串;

????????????????????????????WHEN 可以是“always”、“never”或“auto”

??-U, --binary ???????????????不要清除行尾的 CR 字符(MSDOS/Windows)

若給定<文件>為“-”,則從讀取標準輸入。 ?若無<文件>參數,則除非處于

遞歸工作模式視為從“.”讀取之外,一律視為從“-”讀取。如果提供了少于

兩個<文件>參數,則默認啟用 -h 選項。如果有任意行(或者指定了 -L 選項

并有任意文件)被匹配,則退出狀態為?0,否則為 1;如果有錯誤產生,且未指

定?-q 參數,則退出狀態為 2。

3.sed命令

sed是一種流編輯器,它可以執行各種文本操作,如替換、刪除、插入等。語法格式如下:

sed [OPTIONS] COMMAND [FILE…]

其中,OPTIONS表示選項,COMMAND表示要執行的sed命令,FILE表示要處理的文件名。

sed命令的常見動作包括:

  1. ?a:新增,a的后面可以接字符串,而這些字符串會在新的一行出現(當前行的后一行)
  2. ?i:插入指定字符串,i的后面可以接字符串,而這些字符串會在新的一行出現(當前行的前一行)
  3. ?s:替換指定模式,通常會搭配正則表達式
  4. ?c:替換指定行
  5. ?d:刪除指定行
  6. ?y:字符串轉換
  7. ?p:打印匹配的行,通常會與參數sed -n一起使用

詳細選項參數及其含義可以通過“sed --help”獲取,具體如下:

[test@localhost ~]$ sed --help

用法: sed [選項]... {腳本(如果沒有其他腳本)} [輸入文件]...

??-n, --quiet, --silent

?????????????????取消自動打印模式空間

??????--debug

?????????????????對程序運行進行標注

??-e 腳本, --expression=腳本

?????????????????添加“腳本”到程序的運行列表

??-f 腳本文件, --file=腳本文件

?????????????????添加“腳本文件”到程序的運行列表

??--follow-symlinks

?????????????????直接修改文件時跟隨軟鏈接

??-i[擴展名], --in-place[=擴展名]

?????????????????直接修改文件(如果指定擴展名則備份文件)

??-l N, --line-length=N

?????????????????指定“l”命令的換行期望長度

??--posix

?????????????????關閉所有 GNU 擴展

??-E, -r, --regexp-extended

?????????????????在腳本中使用擴展正則表達式

?????????????????(為保證可移植性使用 POSIX -E)。

??-s, --separate

?????????????????將輸入文件視為各個獨立的文件而不是單個

?????????????????長的連續輸入流。

??????--sandbox

?????????????????在沙盒模式中進行操作(禁用 e/r/w 命令)。

??-u, --unbuffered

?????????????????從輸入文件讀取最少的數據,更頻繁的刷新輸出

??-z, --null-data

?????????????????使用 NUL 字符分隔各行

??????--help ????打印幫助并退出

??????--version ?輸出版本信息并退出

如果沒有?-e, --expression, -f 或 --file 選項,那么第一個非選項參數被視為

sed腳本。其他非選項參數被視為輸入文件,如果沒有輸入文件,那么程序將從標準

輸入讀取數據。

4.awk命令

awk是一種文本處理工具,它可以用于格式化、過濾與計算等操作。語法格式如下:

awk [OPTIONS] 'PATTERN {ACTION}?' [FILE…]

其中,OPTIONS表示選項,PATTERN表示要匹配的模式,ACTION 表示要執行的操作,FILE表示要處理的文件名。

awk命令的常見選項包括:

  1. ?print:打印指定內容
  2. ?if:條件判斷
  3. ?for:循環結構
  4. ?sum:計算指定

詳細選項參數及其含義可以通過“awk --help”獲取,具體如下:

[test@localhost ~]$ awk --help

Usage: awk [POSIX or GNU style options] -f progfile [--] file ...

Usage: awk [POSIX or GNU style options] [--] 'program' file ...

POSIX options: ?????????GNU long options: (standard)

????????-f progfile ????????????--file=progfile

????????-F fs ??????????????????--field-separator=fs

????????-v var=val ?????????????--assign=var=val

Short options: ?????????GNU long options: (extensions)

????????-b ?????????????????????--characters-as-bytes

????????-c ?????????????????????--traditional

????????-C ?????????????????????--copyright

????????-d[file] ???????????????--dump-variables[=file]

????????-D[file] ???????????????--debug[=file]

????????-e 'program-text' ??????--source='program-text'

????????-E file ????????????????--exec=file

????????-g ?????????????????????--gen-pot

????????-h ?????????????????????--help

????????-i includefile ?????????--include=includefile

????????-l library ?????????????--load=library

????????-L[fatal|invalid|no-ext] ???????--lint[=fatal|invalid|no-ext]

????????-M ?????????????????????--bignum

????????-N ?????????????????????--use-lc-numeric

????????-n ?????????????????????--non-decimal-data

????????-o[file] ???????????????--pretty-print[=file]

????????-O ?????????????????????--optimize

????????-p[file] ???????????????--profile[=file]

????????-P ?????????????????????--posix

????????-r ?????????????????????--re-interval

????????-s ?????????????????????--no-optimize

????????-S ?????????????????????--sandbox

????????-t ?????????????????????--lint-old

????????-V ?????????????????????--version

To report bugs, see node `Bugs' in `gawk.info'

which is section `Reporting Problems and Bugs' in the

printed version. ?This same information may be found at

https://www.gnu.org/software/gawk/manual/html_node/Bugs.html.

PLEASE do NOT try to report bugs by posting in comp.lang.awk,

or by using a web forum such as Stack Overflow.

gawk is a pattern scanning and processing language.

By default it reads standard input and writes standard output.

Examples:

????????gawk '{ sum += $1 }; END { print sum }' file

????????gawk -F: '{ print $1 }' /etc/passwd

5.使用實例

(1)?grep使用實例

--在文件中搜索指定字符串

grep?-i?"關鍵字" 文件??????--模糊匹配(不區分大小寫)

grep?-w?"關鍵字" 文件?????--完全匹配

--在文件中搜索多個字符串

grep -e "關鍵字1" -e "關鍵字2" 文件

--在文件中搜索并顯示匹配的行號

grep?-n?"關鍵字" 文件

--在文件中搜索并顯示不匹配的行

grep -v "關鍵字" 文件

--在目錄中遞歸搜索指定字符串

grep?-r?"關鍵字" directory/

--查看文件中搜索的關鍵字的后n行

cat 文件 | grep -An -i "關鍵字"

--查看文件中搜索的關鍵字的前n行

cat 文件 | grep -Bn -i "關鍵字"

--查看文件中搜索的關鍵字的前后n行

cat 文件 | grep -C20 -i "關鍵字"

(2)?sed使用實例

/*?選擇文本p */

--顯示文件的1-3行,不使用-n

sed 1,3p 文件名

--只顯示文件的1-3行,使用-n

sed -n 1,3p 文件名

--顯示包含關鍵字的行

sed -n '/關鍵字/p' 文件名

/*?替換文本s */

語法格式[位置參數1] [,位置參數2]?s/匹配字符/替換字符/[標志]

標志說明:

g:全局匹配,替換文本行中所有符合規則的字符串

十進制數字n:替換第n符合規則的字符串

p:替換第一個并輸出到標準輸出

w:替換第一個,并輸出到磁盤文件中

空:不加標志,則替換第一個

--把文件的a全部替換成A?

sed 's/a/A/g' 文件名 > 新文件名

--對指定行進行替換

sed '1,3 s/a/A/g' 文件名 > 新文件名

/*?刪除文本d */

--刪除文件的第一行

sed '1d' 文件名

--刪除文件的最后一行

sed '$d' 文件名

--刪除空白行

sed '/^$/d' 文件名

/*?追加文本a */

--在文件中root開頭的行的后面插入一行test

sed '/^root/a test' 文件名

/*?插入文本i */

--在文件中root開頭的行的前面插入一行test

sed '/^root/i test' 文件名

(3)?awk使用實例

--打印文件中的所有行

awk '{print}' filename

--打印文件中第二列的內容

awk '{print $2}' filename

--計算文件中所有數字的總和

awk '{sum += $1} END {print sum}' filename

--打印文件中包含指定字符串的行

awk '/關鍵字/?{print}' filename

--在文件中指定列后面添加指定字符串

awk '{$3 = $3 "關鍵字"} {print}' filename

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

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

相關文章

基于Vue3的流程圖繪制庫

流程圖組件的革命者&#xff0c;帶你探索無限可能Vue Flow 基于Vue3的流程圖繪制庫

學習springboot-Bean管理(Bean 注冊,Bean 掃描)

Bean 掃描 可以瀏覽下面的博客鏈接 &#xff1a;spring 學習 &#xff08;注解&#xff09;-CSDN博客 在學習spring 注解時&#xff0c;我們使用 Component &#xff0c;Service,Controller等 這樣的注解&#xff0c;將目標類信息&#xff0c;傳遞給IOC容器&#xff0c;為其創…

spring中將yaml文件轉換為Properties

文章目錄 一 &#xff0c;概述二&#xff0c;源碼 一 &#xff0c;概述 借助于spring框架&#xff0c;將yaml文件轉換為Properties 二&#xff0c;源碼 import java.util.Properties;import org.junit.Test; import org.springframework.beans.factory.config.YamlPropertie…

c++ 中的float和double 的區別 開發過程中使用哪個更好

在 C 中&#xff0c;float 和 double 都是用于表示浮點數的數據類型&#xff0c;但它們在精度、存儲空間和性能方面有所不同。 1. float 和 double 的主要區別 特性floatdouble占用內存4 字節&#xff08;32 位&#xff09;8 字節&#xff08;64 位&#xff09;精度約 6-7 位有…

OpenAI智能體初探:使用 OpenAI Responses API 在 PDF 中實現檢索增強生成(RAG)

大家好,我是大 F,深耕AI算法十余年,互聯網大廠技術崗。 知行合一,不寫水文,喜歡可關注,分享AI算法干貨、技術心得。 歡迎關注《大模型理論和實戰》、《DeepSeek技術解析和實戰》,一起探索技術的無限可能! 引子 在信息爆炸的時代,從大量 PDF 文檔中快速準確地檢索信息…

【MySQL】基本操作 —— DDL

目錄 DDLDDL 常用操作對數據庫的常用操作查看所有數據庫創建數據庫切換、顯示當前數據庫刪除數據庫修改數據庫編碼 對表的常用操作創建表數據類型數值類型日期和時間類型字符串類型 查看當前數據庫所有表查看指定表的創建語句查看指定表結構刪除表 對表結構的常用操作給表添加字…

工廠模式加策略模式 -- 具體實現

這里寫目錄標題 定義接口定義抽象類定義主處理器分支處理器定義工廠demo 定義接口 public interface EntityHandler extends InitializingBean {MatchContentDTO match(MatchEntityDTO matchEntityDTO);String supportEntityType(); }定義抽象類 public abstract class Abstr…

基于Spring Boot的網上寵物店系統的設計與實現(LW+源碼+講解)

專注于大學生項目實戰開發,講解,畢業答疑輔導&#xff0c;歡迎高校老師/同行前輩交流合作?。 技術范圍&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬蟲、數據可視化、安卓app、大數據、物聯網、機器學習等設計與開發。 主要內容&#xff1a;…

PHPCMS V9 登錄加密改造

要改造 phpcms 的后臺登錄&#xff0c;使其前端使用加密方式提交&#xff0c;后端解密&#xff0c;你可以采用 RSA 非對稱加密 或 AES 對稱加密 方式來增強安全性。 方案設計 前端加密 生成公私鑰對&#xff08;推薦使用 RSA&#xff09;。前端使用公鑰加密密碼&#xff0c;然…

LeetCode 滑動數組統計+至少 2962. 統計最大元素出現至少 K 次的子數組

2962. 統計最大元素出現至少 K 次的子數組 給你一個整數數組 nums 和一個 正整數 k 。 請你統計有多少滿足 「 nums 中的 最大 元素」至少出現 k 次的子數組&#xff0c;并返回滿足這一條件的子數組的數目。 子數組是數組中的一個連續元素序列。 示例 1&#xff1a; 輸入&#…

FANUC機器人幾種常用的通訊網絡及接口

FANUC機器人幾種常用的通訊網絡及接口 Devicenet 網絡通訊接口&#xff0c;接口為5針線 (規定用的機架為 81-84&#xff09; PROFIBUS 網絡通訊接口&#xff0c;針腳為2針&#xff08;規定用的機架為 67&#xff09; Intemet 網絡通訊接口&#xff08;常用的網線接口&#xf…

CentOS8+Zabbix7.2.4解決中文顯示問題

#cd /usr/share/zabbix/ui/include/ #grep graphfont defines.inc.php define(‘ZBX_GRAPH_FONT_NAME’, ‘graphfont’); // font file name define(‘ZBX_FONT_NAME’, ‘graphfont’); #ll /usr/share/zabbix/ui/assets/fonts/graphfont.ttf lrwxrwxrwx. 1 root root 36 3…

AI自動化編程初探

先說vscodeclinemodelscope方案&#xff0c;后面體驗trae或者cursor再寫寫其它的。vscode和trae方案目前來說是免費的&#xff0c;cursor要用claud需要付費&#xff0c;而且不便宜&#xff0c;當然效果可能是最好的。 vscode方案&#xff0c;我的經驗是最好在ubuntu上&#xff…

101.在 Vue 3 + OpenLayers 使用 declutter 避免文字標簽重疊

1. 前言 在使用 OpenLayers 進行地圖開發時&#xff0c;我們經常需要在地圖上添加點、線、區域等圖形&#xff0c;并給它們附加文字標簽。但當地圖上的標注較多時&#xff0c;文字標簽可能會發生重疊&#xff0c;導致用戶無法清晰地查看地圖信息。 幸運的是&#xff0c;OpenL…

18天 - 常見的 HTTP 狀態碼有哪些?HTTP 請求包含哪些內容,請求頭和請求體有哪些類型?HTTP 中 GET 和 POST 的區別是什么?

常見的 HTTP 狀態碼有哪些&#xff1f; HTTP 狀態碼用于指示服務器對客戶端請求的響應結果&#xff0c;常見的 HTTP 狀態碼可以分為以下幾類&#xff1a; 1. 信息類&#xff08;1xx&#xff09; 100 Continue&#xff1a;客戶端應繼續發送請求。101 Switching Protocols&…

IXTUR氣控永磁鐵:以高精度氣控和穩定磁場,為機器人應用提供穩定抓取力

在現代工業生產和物流領域&#xff0c;物料的抓取與搬運是影響生產效率和成本控制的重要環節。傳統夾爪在面對不同材質、形狀和重量的物體時&#xff0c;常常存在適應性差、抓取不穩定、操作復雜等問題&#xff0c;導致生產流程中頻繁出現停機調整&#xff0c;增加了人工干預成…

江科大51單片機筆記【16】AD/DA轉換(下)

寫在前言 此為博主自學江科大51單片機&#xff08;B站&#xff09;的筆記&#xff0c;方便后續重溫知識 在后面的章節中&#xff0c;為了防止篇幅過長和易于查找&#xff0c;我把一個小節分成兩部分來發&#xff0c;上章節主要是關于本節課的硬件介紹、電路圖、原理圖等理論知識…

【C++】 —— 筆試刷題day_4

刷題day_4 繼續加油&#xff01;&#xff01;&#xff01; 一、Fibonacci數列 題目鏈接&#xff1a;Fibonacci數列 題目解析 題目要求&#xff0c;輸入一個數N&#xff0c;我們可以對N進行1/-1操作&#xff1b;題目讓我們輸出對N進行至少多少步可以變成Fibonacci數。 這里題目…

IP層之分片包的整合處理---BUG修復

在之前章節中&#xff0c;筆者就IP層之分片包的整合處理進行了概念介紹&#xff0c;以及代碼編寫和仿真&#xff0c;在整體代碼調試環節&#xff0c;筆者發現了一個問題&#xff0c;在本文中&#xff0c;筆者將就這個BUG進行說明&#xff0c;以及進行修復&#xff0c;講解代碼實…

修復Electron項目Insecure Content-Security-Policy(內容安全策略CSP)警告的問題

將以下代碼粘貼進html的<header>標簽內 <metahttp-equiv"Content-Security-Policy"content"default-src self; style-src self unsafe-inline; img-src self data:; "> 解釋一下上面代碼中的屬性含義 default-src self&#xff1a;配置加載策…