八、文本處理工具

来源:https://www.cnblogs.com/Ju-zhi/archive/2023/12/14/17902280.html
-Advertisement-
Play Games

文本提取工具(查看文本) 文本分析工具 文本操作工具 1、文本提取工具 cat、more、less查看文本內容 cat:列印一個或多個文件到標準輸出 1 #合併文件 2 [root@example tmp]# cat file1.txt file2.txt > file3.txt 3 4 #查看文件 ...


文本提取工具(查看文本)

文本分析工具

文本操作工具

1、文本提取工具
  1. cat、more、less查看文本內容

  • cat:列印一個或多個文件到標準輸出

 1 #合併文件
 2 [root@example tmp]# cat file1.txt file2.txt > file3.txt
 3 
 4 #查看文件行號
 5 [root@example tmp]# cat -n /tmp/passwd | grep 12
 6 
 7 #查看文件中是否存在特殊字元
 8 [root@example tmp]# cat -A test.txt 
 9 #!/bin/bash$
10 cat >> err.txt <<EOF$
11 hostname:example.com$
12 cpu:2h$
13 mem:4096M$
14 ip:192.168.200.154.111$
15 EOF$
  • more:瀏覽文件內容,每次只看一頁

  • less:瀏覽文件內容,每次只看一頁

    • -/text:搜索text

    • -n/N:跳轉到next/previous匹配的地方

    • -v:用文本編輯器打開該文件

    • man命令中是採用less來分頁的

  1. head、tail過濾文本內容

  • head:顯示文件的起始10行

    • 使用 -n選項指定顯示的行

  • tail:顯示文件最後10行

    • 使用-n選項指定顯示的行

    • 使用-f選項將文件末尾追加的內容顯示在當前終端

      • 對於監控日誌文件非常有用

    如果需要在指定文本中取出內容(以行取)

    • 先用head取出最大行

    • 然後用 tail 減掉所需行數

  1. grep 文本過濾工具

    • -o:顯示所有關鍵字

    • -i:忽略大小寫

    • -n:顯示行號

    • -c:顯示行數

    • -v:顯示不匹配的行(取反)

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

    • -AX:將匹配行及其後X行一起顯示

    • -BX:將匹配行及其前X行一起顯示

    • -CX:將匹配行及其前後X行一起顯示

    • -r:遞歸搜索目錄,根據文本內容搜索文件

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

    • –color=auto:用color顏色高亮顯示匹配的數據

 1 #過濾關鍵字
 2 [root@example tmp]# grep root passwd 
 3 root:x:0:0:root:/root:/bin/bash
 4 operator:x:11:0:operator:/root:/sbin/nologin
 5 
 6 #顯示所有關鍵字
 7 [root@example tmp]# grep -o root passwd 
 8 root
 9 root
10 root
11 root
12 
13 #忽略大小寫
14 [root@example tmp]# grep -i root passwd 
15 root:x:0:0:root:/root:/bin/bash
16 operator:x:11:0:operator:/root:/sbin/nologin
17 
18 #顯示行號
19 [root@example tmp]# grep -n root passwd 
20 1:root:x:0:0:root:/root:/bin/bash
21 10:operator:x:11:0:operator:/root:/sbin/nologin
22 
23 #取反
24 [root@example tmp]# grep -v root passwd 
25 bin:x:1:1:bin:/bin:/sbin/nologin
26 
27 #0表示上一條命令執行成功
28 [root@example tmp]# grep -q root passwd 
29 [root@example tmp]# echo $?
30 0
31 #1表示上一條命令執行失敗
32 [root@example tmp]# echo $?
33 1
34 
35 [root@example var]# grep -A4 ftp passwd
36 [root@example var]# grep -B4 ftp passwd
37 [root@example var]# grep -C4 ftp passwd
38 
39 [root@example var]# grep -rl passwd /etc
40 /etc/nsswitch.conf.bak
41 /etc/login.defs
42 /etc/security/pwquality.conf
43 
44 [root@example var]# alias 
45 alias cp='cp -i'
46 alias egrep='egrep --color=auto'
47 alias fgrep='fgrep --color=auto'
48 #取消高亮
49 [root@example var]# unalias grep
50 #打開高亮
51 [root@example var]# alias grep='grep --color=auto'
52 [root@example var]# source /etc/profile

    4. 正則表達式

又稱標準正則表達式,是最早的正則表達式規範,僅支持最基本的元子符集。基本正則表達式是POSIX規範制定的兩種正則表達式語法標準之一,另外一種語法標準稱為擴展正則表達式。

1 [root@example var]# grep bash$ /etc/passwd
2 root:x:0:0:root:/root:/bin/bash
3 user:x:1000:1000:user:/home/user:/bin/bash
4 zhangsan:x:1005:1006::/home/zhangsan:/bin/bash
字元含義
^ 在每行的開始進行匹配
$ 在每行的末尾進行匹配
\ < 在字的開始進行匹配
\ > 在字的末尾進行匹配
. 對任何單個字元進行匹配
[str] 對str中的任何單個字元進行匹配
[^str] 對任何不在str中的 單個字元進行匹配
[a-b] 對a到b之間的任何字元進行匹配
\ 轉義字元,抑制後面的一個字元的特殊含義
* 對前一項(item)進行0次或多次重覆匹配

grep使用擴展的正則需要使用egrep或者是grep -E

 1 [root@example etc]# egrep roo passwd
 2 root:x:0:0:root:/root:/bin/bash
 3 operator:x:11:0:operator:/root:/sbin/nologin
 4 [root@example etc]# grep -E roo+ passwd
 5 root:x:0:0:root:/root:/bin/bash
 6 operator:x:11:0:operator:/root:/sbin/nologin
 7 [root@example etc]# grep -E 'bash|user' passwd
 8 root:x:0:0:root:/root:/bin/bash
 9 qemu:x:107:107:qemu user:/:/sbin/nologin
10 [root@example etc]# grep  -E '(roo?)' passwd
11 root:x:0:0:root:/root:/bin/bash
12 operator:x:11:0:operator:/root:/sbin/nologin
13 
14 [root@example etc]# ifconfig | grep -Eo '([0-9]{,3}\.){3}1{1}..'
15 192.168.200.154
16 127.0.0.1  
17 192.168.122.1  
18 
19 [root@example etc]# ifconfig | grep -Eo '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}'|grep -v 255
20 192.168.200.154
21 127.0.0.1
22 192.168.122.1
23 
24 [root@example etc]# ifconfig | grep -w inet | cut -d " " -f10
25 192.168.200.154
26 127.0.0.1
27 192.168.122.1
  1. cut - 提取列或欄位

  • 顯示文件指定的列或者標準輸入數據

    • cut -d: -f1 /etc/passwd; cut -d : -f1,3 passwd

    • grep root /etc/passwd | cut -d:-f7

  • -d:來指定列分隔符

  • -f: 來指定要列印的列

  • -c:指定按字元提取

    • cut -c 2-5 /usr/share/dict/words

  1. awk 以空作為預設的分隔符

  • awk -F 分隔符 ’{print $列}‘ 文件

1 [root@example ~]# ifconfig | grep -w inet | awk -F " " '{print $2}' 
2 [root@example ~]# awk -F : '{print $1,$3}' /etc/passwd
3 [root@example ~]# ifconfig | grep -w inet | cut -d " " -f10
4 [root@example ~]# ifconfig | grep -w inet | cut -d " " -f10 | cut -d . -f4 | cut -c 1-2
5 [root@example ~]# cut -c 1-4 /etc/passwd 
2、文本分析工具
    1. 文本統計:wc

 1 [root@example tmp]# wc passwd 
 2   48  107 2636 passwd
 3 第一列是文件的行數
 4 第二列是文件的單詞數
 5 第三列是文件的位元組數
 6 [root@example tmp]# wc -l passwd 
 7 48 passwd
 8 [root@example tmp]# wc -w passwd 
 9 107 passwd
10 [root@example tmp]# wc -c passwd 
11 2636 passwd
12 [root@example tmp]# wc -wc passwd 
13  107 2636 passwd
  1. 文本排序:sort

sort預設按照字元表的順序排序,不是按照單詞或者數字的方式排序

  • -n:以數字的方式進行排正序

  • -r:排倒序

  • -k:指定列

  • -t:指定分隔符

  • -u:去重

  • -f:忽略大小寫

1 以數字進行排序 -n
2 [root@example tmp]# sort -t : -k 3 -n passwd 
3 以數字進行倒序 -r
4 [root@example tmp]# sort -t : -k 3 -r -n passwd 
  1. 文本比較:diff

比較文本差異,可以使用圖像化工具vimdiff

1 [root@example tmp]# diff /etc/passwd /tmp/passwd 
2 47a48
3 > user2:x:1002:1002::/home/user2:/bin/bash
4 [root@example tmp]# vimdiff /etc/passwd /tmp/passwd 
5 2 files to edit
3、文本操作工具
  1. 文本轉換工具:tr

1 [root@example tmp]# tr a-z 1-2 < passwd 
2 2222:2:0:0:2222:/2222:/222/2122
  1. 流編輯器:sed

用來進行文本的操作;查找、替換、刪除、新增

  • 地址定界:指的是要操作的行

    • #:為數字,指定要進行處理操作的行

    • $_:表示最後一行,多個文件進行操作的時候,為最後一個文件的最後一行

    • /regexp/:表示能夠被regexp匹配到的行,regexp及基於正則表達式的匹配

    • /regexp/l:匹配時忽略大小寫

    • \%regexp%:任何能夠被regexp匹配到的行,換用%(用其它字元也可以,如:#)為邊界符號,當內容出現 \ 時使用

    • addr1,addr2:指定範圍內的所有的行(範圍選定)常用地址界表示方式

      • 0,/regexp/:從起始行開始到第一次能夠被regexp匹配到的行

      • /regexp/,/regexp/:被模式匹配到的行內地的所有的行

    • first~step:指定起始的位置及步長,例如:1 ~ 2表示1,3,5…

    • addr1,+N:指定行以及以後的N行

    • addr1,~N:指定行開始的N行

 1 [root@example tmp]# sed -n 1p passwd 
 2 root:x:0:0:root:/root:/bin/bash
 3 [root@example tmp]# sed -n 10,12p passwd 
 4 operator:x:11:0:operator:/root:/sbin/nologin
 5 games:x:12:100:games:/usr/games:/sbin/nologin
 6 ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
 7 [root@example ~]# sed -n '/^root/p' /etc/passwd
 8 root:x:0:0:root:/root:/bin/bash
 9 [root@example ~]# sed -n '$p' /etc/passwd
10 zhangsan:x:1001:1001::/home/zhangsan:/bin/bash

地址定界的操作

  • p:列印模式空間的內容

  • d:刪除匹配到的內容

  • -i:將操作保存到文件

  • a\text:append,表示在匹配到的行之後追加內容

  • i\text:insert,表示在匹配到的行之前追加內容

  • c\text:change,表示把匹配到的行和給定的文本進行交換

  • s/regexp/replacement/flages:查找替換,把text替換為 regexp 匹配到的內容(其中/可以用其它字元代替,例如@)

  • 其它編輯命令

    • g:全局替換,預設只替換第一個

    • i:不區分大小寫

    • p:如果成功替換則列印

  • w /path/to/somefile:將匹配到的文件另存到指定的文件中

1 [root@example ~]# sed '1d' /etc/passwd
2 [root@example ~]# sed -i '1d' /etc/passwd
3 [root@example ~]# sed '/ftp/i\text' /tmp/passwd 
4 [root@example ~]# sed '/ftp/a\text' /tmp/passwd 
5 [root@example ~]# sed '/ftp/c\text' /tmp/passwd 
6 [root@example ~]# sed -n 's/ftp/http/p' /tmp/passwd 
7 http:x:14:50:FTP User:/var/ftp:/sbin/nologin
8 [root@example ~]# sed  '46,48 s/ftp/http/gip' /tmp/passwd 
9 [root@example ~]# sed '/root/ w /tmp/zhangsan.txt' /tmp/passwd 

註意事項:

  • 如果沒有指定地址,表示命令將應用於每一行

  • 如果只有一個地址,表示命令將應用於這個地址匹配的所有行

  • 如果指定了由逗號分隔的兩個地址,表示命令應用於匹配第一個地址和第二地址之間的行(包括這兩行)

  • 如果地址後面跟有感嘆號,表示命令將應用於不匹配該地址的所有行

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1. 同城雙活是什麼 同城雙活是一種容災架構的設計模式,主要用於提高系統的可用性和容錯性。它通常涉及在同一個城市內建立兩個數據中心(機房),這兩個數據中心同時對外提供服務,實現了高可用性和冗餘。 關鍵特點和優勢包括: 雙活部署: 兩個數據中心都處於活躍狀態,同時處理用戶請求。這樣,當一個數據中心發生 ...
  • 公司某規則引擎系統,在每次發版啟動會手動預熱,預熱完成當流量切進來之後會偶發的出現一次長達1-2秒的Young GC(流量並不大,並且LB下的每個節點都會出現該情況)在這次長暫停之後,每一次的年輕代GC暫停時間又都恢覆在20-100ms以內2秒雖然看起來不算長吧,但規則引擎每次執行也才幾毫秒,這誰能... ...
  • Qt 是一個跨平臺C++圖形界面開發庫,利用Qt可以快速開發跨平臺窗體應用程式,在Qt中我們可以通過拖拽的方式將不同組件放到指定的位置,實現圖形化開發極大的方便了開發效率,本章將重點介紹`QRadioButton`單選框組件以及與之交互的`QButtonGroup`類的常用方法及靈活運用。`QRad... ...
  • 前幾天跟大家介紹了在winform中使用blazor hybrid,而且還說配上blazor的ui可以讓我們的winform程式設計的更加好看,接下來我想以一個在winform blazor hybrid中繪圖的例子來進行說明,希望對你有所幫助。 效果 在開始之前,先給大家演示一下效果,如下所示: ...
  • 反射 C#中的反射是一種使程式在運行時能夠動態地獲取類型信息並調用其成員的技術。通過反射,程式可以在運行時進行類型的動態載入、創建對象、調用方法和屬性,以及訪問和修改欄位等。反射可以使程式更加靈活,但也增加了一定的性能開銷。 在C#中,反射主要是通過System.Reflection命名空間中的類來 ...
  • 介面 C#中的介面是一種定義了一組方法、屬性和事件的類型。它只包含成員的聲明,而不包含任何實現。介面可以被類通過實現的方式使用,從而使類能夠具有介面定義的行為。 介面在C#中被定義為使用interface關鍵字,介面的成員預設是公共的。類通過使用implements關鍵字實現介面,並提供介面中定義的 ...
  • ImageSharp:.NET平臺上的靈活高性能圖像處理庫 ImageSharp 是一個強大的圖像處理庫,專為.NET平臺設計。無論是簡單的圖像載入和保存,還是複雜的圖像處理、濾鏡應用和文本添加,ImageSharp 提供了豐富而靈活的功能,使圖像處理變得簡單而愉快。 主要特性: 跨平臺支持: Im ...
  • 是這麼個情況今天小編心血來潮突然的想去學習進階一下自己的技術,興緻衝衝忍著腰疼腿疼(是小編這兩天鍛煉身體過度)起床打開了電腦找到許久沒用的idea打開後發現他一直報錯)無奈之下只能卸載重新安裝。在網上找了好多的破解資料都寫的不是很清楚要不就是廣告,在無奈之下只能加了一個廣告的選擇付款(49元一年後, ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...