Linux:Shell編輯之文本處理器(sed)

目錄

緒論

1、sed的原理:讀取 執行 顯示 三個過程

2、sed 文本內容處理工具,文件過大怎么辦?

3、sed的操作選項

3.1 常用選項

3.2 操作符

3.3?行號的范圍打印

3.4 對包含指定字符串的內容進行打印

3.5 刪

3.5.1 正則表達式刪除

3.6 替換

3.6.1 字母字符的大小寫替換

3.7 整行替換和單字符替換

3.8 增加

3.9?sed命令當中字符串的位置進行交換

3.10?取日志范圍?


緒論

sed:類似于vim就是一個文本編輯器,按行來編輯和處理,針對文件內容的行進行處理

主要作用是對文本內容進行增刪改查,sed可以支持正則表達式,支持擴展正則表達式

1、sed的原理:讀取 執行 顯示 三個過程

讀取:讀取文本內容后,讀取到的內容存放到臨時的緩沖區,模式空間

執行:在模式空間,根據讀取的文本內容,按行執行,除非指定引號,否則會遍歷所有行,從上往下執行

顯示:執行完后,把執行結果打印,如果要改變生效,模式空間被修改的內容會寫入到指定的文件當中,只是操作,但是不最終寫入文件,只展示結果,展示完后,模式空間的數據立即刪除

2、sed 文本內容處理工具,文件過大怎么辦?

split拆分文件

或者通過? cat? 文件名? |? sed? 處理(只適用于中興文件,大型文件還是先分割)

3、sed的操作選項

sed -e '操作'? 文件1 -e '操作' 文件2

3.1 常用選項

-e :條件操作選項

-f :指定腳本文件來處理輸入的文件內容,把命令寫在腳本里,用腳本里的命令來處理第二個文件里面的內容

-i :立即生效 慎用

-n :顯示script處理之后的結果

3.2 操作符

s 替換指定字符

d? 刪除指定的行

a? 增加在當前的下面插入指定內容

i? 增加,在指定行的上面插入指定的內容

c? 替換,整行替換

y? 替換字符,但是替換前后的字符長度必須一致

p? 打印

r? 擴展正則

sed的核心就是改,刪 ,增 查是沒有grep強大?

sed '? '? :查看打印功能

eg:sed? '? '? /etc/passwd

只輸出行號:sed? -n? '='? ky30.txt

輸出行號和內容:sed? -n? '=;p'? ky30.txt

打印指定行:sed? -n? '2p'? ky30.txt

直接打印最后一行:sed? -n? '$p'? ky30.txt

3.3?行號的范圍打印

sed? -n? '1,3p'? ky30.txt? 打印1到3行

sed? -n? '2,+2p'? ky30.txt? 打印第2到第4行

?sed? -n? '2p;$p'? ky30.txt? 打印第二行和最后一行

3.4 對包含指定字符串的內容進行打印

sed? -n? '/o/p'? ky20.txt? 把所有包含o的行會全部打印

sed? -r? -n? '/(99:){2}/p'? /etc/passwd? 把有99的那行打印

3.5 刪

sed? "d"? ky30.txt

eg:怎么不進人文件就可以刪除文件的內容(免交互刪除)

sed? -i? 'd'? ky30.txt或者 cat? /dev/null? >? ky30.txt

指定行號進行刪除:

sed? -n? '3d;p'? ky30? 刪除第三行,打印剩余行內容

sed? -n? '|d;3d;p'? ky30.txt

sed? '/big/!d'? ky30.txt? 除了big這行不刪除

3.5.1 正則表達式刪除

sed? '/^$'? ky30.txt? 刪除空行

3.6 替換

s:替換字符串

c:整行替換

y:單字符替換,前后長度保持一致

sed? -n? 's/root/test/p'? /etc/passwd? 替換每行的第一個root為test,想要替換第二個在p前面加一個2,想要替換全部在p前面加個g

3.6.1 字母字符的大小寫替換

sed? 's/[a-z]/\u&/'? ky30.txt? 首字母變大寫了

sed? 's/[a-z]/\u&/g'? ky30.txt所有字母都生效

l&轉換成小寫的特殊符號,在使用時,需要轉義符\

eg:sed? 's/[A-Z]\l&/g'? ky30.txt

?u&轉換成大寫的特殊符號,在使用時,需要轉義符\

g 全部替換,如果不加,只會更改首字符

3.7 整行替換和單字符替換

sed? '/exy/c? zhangsan is? sexy'? ky30.txt? 將exy替換成zhangsan? is? sexy

字符串替換前后長度要相同:y

sed? 'y/a/1/'? ky30.txt? 將a換成1

3.8 增加

a:在下一行添加

i:在上一行添加

r:?在行后讀入指定文件內容

eg:sed? '/123/a? 456'? ky30.txt

sed? '/bighouse/r? ky31.txt'? ky30.txt? ?前面為要讀的文件? 后面為本文件

3.9?sed命令當中字符串的位置進行交換

sed? -r? 使用擴展正則

echo? ky30lt? |? sed? -r? 's/(ky30)(lt)/\2\'p

漢字換位:

echo? 漢字? |? sed? -r? 's/(.)(.)/\2\1/'

sed? -f:?指定腳本文件來處理輸入的文件內容,把命令寫在腳本里,用腳本里的命令來處理第二個文件里面的內容

3.10?取日志范圍?

?

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

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

相關文章

一個工作簿中的多個工作表拆分成多個工作簿

在Excel 2016中將一個工作簿中的多個工作表拆分成多個工作簿,在開發工具中的vba 模塊中輸入一下代碼(并修改savepath的值為要存儲的路徑),然后運行即可。 Sub SplitWorkbook()Dim srcWorkbook As WorkbookDim srcWorksheet As Wo…

深入淺出 棧和隊列(附加循環隊列、雙端隊列)

棧和隊列 一、棧 概念與特性二、Stack 集合類及模擬實現1、Java集合中的 Stack2、Stack 模擬實現 三、棧、虛擬機棧、棧幀有什么區別?四、隊列 概念與特性五、Queue集合類及模擬實現1、Queue的底層結構(1)順序結構(2)鏈…

Golang-使用 gvm 進行版本控制

當你想為每個項目切換 go 版本時,gvm (Go Version Manager) 很方便。 這里,我將介紹“如何在Mac上安裝gvm”和“如何使用gvm” 使用準備 僅適用于 Mac 的準備工作 按照MacOSX 要求中的說明執行以下命令。 xcode-select --install brew update brew …

C++(Qt)軟件調試---將調試工具安裝到AeDebug(11)

C(Qt)軟件調試—將調試工具安裝到AeDebug(11) 文章目錄 C(Qt)軟件調試---將調試工具安裝到AeDebug(11)1、前言1.1 使用的調試工具 2、調試器安裝1.1 WinDbg1.2 procdump1.3 DrMinGW1.4 vsjitdebugger 更多精彩內容👉個…

深入了解Linux運維的重要性與最佳實踐

Linux作為開源操作系統的代表,在企業級環境中的應用越來越廣泛。而在保障Linux系統的正常運行和管理方面,Linux運維顯得尤為關鍵。本文將介紹Linux運維的重要性以及一些最佳實踐,幫助讀者更好地了解和掌握Linux系統的運維技巧。 首先&#xf…

OPENCV C++(十)gramm矯正+直方圖均衡化

兩者都是只對單通道使用,對多通道的話 就需要分離通道處理再合并通道 兩種方法,第一個要運算次數太多了,第二個只需要查表 伽馬矯正函數,這里用第二種方法,且寫法有點高級 int gammaCorrection(cv::Mat srcMat, cv::…

Java【Spring】使用注解, 更簡單的存儲和獲取 Bean

文章目錄 前言一、存儲 Bean1, 配置文件2, 五大類注解Bean 的命名規則 3, 方法注解Bean 的命名規則 二、獲取 Bean1, 屬性注入2, Setter 注入3, 構造方法注入4, Autowired 和 Resource 的區別5, 同一個類型的多個 Bean 注入問題 總結 前言 各位讀者好, 我是小陳, 這是我的個人主…

【網絡基礎實戰之路】實現RIP協議與OSPF協議間路由交流的實戰詳解

系列文章傳送門: 【網絡基礎實戰之路】設計網絡劃分的實戰詳解 【網絡基礎實戰之路】一文弄懂TCP的三次握手與四次斷開 【網絡基礎實戰之路】基于MGRE多點協議的實戰詳解 【網絡基礎實戰之路】基于OSPF協議建立兩個MGRE網絡的實驗詳解 PS:本要求基于…

FreeRTOS(任務通知)

資料來源于硬件家園:資料匯總 - FreeRTOS實時操作系統課程(多任務管理) 目錄 一、任務通知的概念 1、概念 2、發送通知給任務的方式 3、任務通知使用限制 二、任務通知的運行機制 三、任務通知的API函數 1、任務通知的數據結構 2、常用的API函數 3、函數x…

opencv實戰項目 手勢識別-實現尺寸縮放效果

手勢識別系列文章目錄 手勢識別是一種人機交互技術,通過識別人的手勢動作,從而實現對計算機、智能手機、智能電視等設備的操作和控制。 1. opencv實現手部追蹤(定位手部關鍵點) 2.opencv實戰項目 實現手勢跟蹤并返回位置信息&…

Linux elasticsearch設置為開機自啟動服務

Linux elasticsearch怎么設置為設置為開機自啟動服務 1、進入/etc/init.d目錄 cd /etc/init.d 2、新建文件elasticsearch,注意,沒有擴展名 vi elasticsearch 3、新建文件elasticsearch的內容如下 說明: (1)“su…

基于低代碼和數字孿生技術的電力運維平臺設計

電力能源服務商在為用能企業提供線上服務的時候,不可避免要面對用能企業的各種個性化需求。如果這些需求和想法都要靠平臺廠家研發人員來實現,那在周期、成本、效果上都將是無法滿足服務運營需要的,這也是目前很多線上能源云平臺應用效果不理…

【狀態模式】拯救if-else堆出來的屎山代碼

前言 我想大家平時都在開發重都遇見過屎山代碼,這些屎山代碼一般都是由于復雜且龐大的if-else造成的,狀態模式,是一種很好的優化屎山代碼的設計模式,本文將采用兩個業務場景的示例來講解如何使用狀態模式拯救屎山代碼。 目錄 前…

【Axure高保真原型】通過輸入框動態控制環形圖

今天和大家分享通過輸入框動態控制環形圖的原型模板,在輸入框里維護項目數據,可以自動生成對應的環形圖,鼠標移入對應扇形,可以查看對應數據。使用也非常方便,只需要修改輸入框里的數據,或者復制粘貼文本&a…

簡單記錄牛客top101算法題(初級題C語言實現)BM17 二分查找 BM21 旋轉數組的最小數字 BM23 二叉樹的前序遍歷

1. BM17 二分查找 要求:給定一個 元素升序的、無重復數字的整型數組 nums 和一個目標值 target ,寫一個函數搜索 nums 中的 target,如果目標值存在返回下標(下標從 0 開始),否則返回 -1。 輸入&#xff1a…

【云原生】K8S存儲卷:PV、PVC詳解

目錄 一、emptyDir存儲卷二、hostPath存儲卷三、nfs共享存儲卷四、PVC 和 PV4.1 NFS使用PV和PVC4.2創建動態PV 一、emptyDir存儲卷 容器磁盤上的文件的生命周期是短暫的,這就使得在容器中運行重要應用時會出現一些問題。首先,當容器崩潰時,ku…

UG NX二次開發(C++)-PK函數創建一條圓弧曲線

文章目錄 1、前言2、創建一個項目3、添加頭文件4、在do_it中添加創建圓曲線的源代碼5、調用dll6、再創建一個長方體驗證1、前言 采用PK進行UG NX二次開發,現在看到的文章很多是直接創建實體,然后在UG NX的視圖區顯示出來,對于創建圓曲線的文章不多,本文講一下PK函數創建圓…

Java基礎篇--日期時間類

目錄 前言 Instant(時間戳)類 LocalData(日期)類 LocalTime(時間)類 LocalDataTime(日期時間)類 Duration(時間間隔)類 Period(日期間隔)類 Clock(獲取時區)類 前言 在開發中經常需要處理日期和時間,Java提供…

Git 代碼分支規范

目的 俗話說:沒有規矩,不成方圓。遵循一個好的規章制度能讓你的工作事半功倍。同時也可以展現出你做事的認真的態度以及你的專業性,不會顯得雜亂無章,管理困難。Git分支規范也是一樣。當遵循了某種約定的Git分支,在代…

若依框架淺淺介紹

由若依官網所給介紹可知 1、文件結構介紹 在ruoyi-admin的pom.xml文件中引入了ruoyi-framework、ruoyi-quartz和ruoyi-generatior模塊,在ruoyi-framework的pom.xml文件中引入了ruoyi-system模塊。 2、技術棧介紹 前端:Vue、Element UI后端&#xff1a…