新聞中心
在Linux命令行中,字符串匹配某一行是一項非常重要的功能。隨著我們在Linux系統(tǒng)上的工作量增加,我們需要在日常工作中頻繁地檢索一些文本文件,以找到我們需要的信息。

在這篇文章中,我們將討論一些常用的Linux命令,這些命令可以幫助我們快速地在文本文件中查找某個字符串。我們將介紹的命令包括grep、sed和awk。
grep命令
grep命令是一種常用的查找命令,它可以在一個或多個文本文件中查找指定的字符串。grep命令的語法如下:
grep [options] pattern [file(s)]
其中,pattern是要查找的字符串,file(s)是要查找的文件。如果不指定文件名,那么grep會從標準輸入中讀取數(shù)據(jù)。下面是一些常用的grep選項:
-i:忽略大小寫
-v:反向選擇,只輸出沒有匹配到的行
-c:只輸出匹配到的行數(shù)
例如,假設我們有一個名為file1.txt的文件,文件中包含以下文本:
Hello world!
This is a test file.
Welcome to Linux!
我們可以使用grep命令查找包含“Welcome”單詞的行,命令如下:
grep Welcome file1.txt
輸出結果如下:
Welcome to Linux!
我們還可以使用-i選項進行大小寫不敏感的查找:
grep -i welcome file1.txt
輸出結果仍然是:
Welcome to Linux!
sed命令
sed命令是一個非常強大的文本處理工具,它可以對文本文件進行編輯和轉換。在字符串匹配方面,sed命令通常用于替換文本文件中的某些字符串。sed命令的語法如下:
sed [options] ‘pattern’ [file(s)]
其中,pattern是要替換的字符串。下面是一些常用的sed選項:
-i:直接修改原始文件
-e:可以使用多個替換操作
-n:只顯示替換后的文本
例如,假設我們有一個名為file2.txt的文件,文件中包含以下文本:
Hello world!
This is a test file.
Welcome to Linux!
我們可以使用sed命令將文本文件中的所有“test”字符串替換為“trial”:
sed -i ‘s/test/trial/g’ file2.txt
執(zhí)行該命令后,file2.txt的內容將變?yōu)椋?/p>
Hello world!
This is a trial file.
Welcome to Linux!
awk命令
awk命令是一種用于處理文本數(shù)據(jù)的編程語言,它可以對文本文件進行分析和轉換。awk的主要功能是在文本文件的每一行中查找并處理某個特定的模式。awk命令的語法如下:
awk [options] ‘{action}’ [file(s)]
其中,action是一個或多個命令,用于指定要操作的文本。下面是一些常用的awk選項:
-F:用于指定模式的分隔符
-v:用于傳遞變量的值到awk腳本中
例如,假設我們有一個名為file3.txt的文件,文件中包含以下文本:
1 2
5 6
a b
我們可以使用awk命令查找所有以“a”開頭的行,命令如下:
awk ‘/^a/ {print}’ file3.txt
輸出結果如下:
a b
我們還可以使用awk命令進行更復雜的文本處理。例如,假設我們有一個名為file4.txt的文件,文件中包含以下文本:
name,age,gender
John,25,Male
Jane,30,Female
Chris,28,Male
我們可以使用awk命令計算該文件中的所有年齡的總和,命令如下:
awk -F’,’ ‘NR > 1 {sum += $2} END {print sum}’ file4.txt
輸出結果為:
結論
在Linux命令行中使用字符串匹配某一行是一種非常有用的技能。不論是從一個日志文件中查找特定的IP地址,還是從一個包含用戶信息的文本文件中搜索年齡大于30歲的用戶,都有很多的場景可以應用這項技能。在這篇文章中,我們介紹了grep、sed和awk這三個常用的Linux命令,這些命令可以讓我們在文本文件中快速地定位字符串并對其進行操作。當然,這只是這些命令的簡單演示,它們還有更多的用法和選項,需要我們進一步深入學習和掌握。
相關問題拓展閱讀:
- 求助Linux下帶特殊字符的字符串查找方法!
- Linux sed 命令詳解
求助Linux下帶特殊字符的字符串查找方法!
#include
#include
#include
//三個頭文件,分別表示標準化io,標準化庫文件,字符串類文件的頭文件
int main()
{
int line=0;//記錄行數(shù)
FILE *fp;//定義文件指針
char FILENAME,li,indata,*sust=NULL;//
printf(“Input file name please:”);
gets(FILENAME);//獲取文件名
if ((fp=fopen(FILENAME,”r”))!=NULL){//如果讀取成功,即fopen函數(shù)返回值不為空
printf(“Input a string please:”);
gets(indata);//輸入要尋找的那個字符串
while (!feof(fp))//當文件未結束一直執(zhí)行該操作
{
line++;//行計數(shù)加一
fgets(li,255,fp);//讀取255個字符
sust=strstr(li,indata);//從字符串li中尋找indata之一次出現(xiàn)的位置(不比較結束符NULL)。參看//
if (sust!=NULL) {//如果未找到
printf(“Found it in line %d\n”,line);
}
}
fclose(fp);//關閉文件
}
else puts(“File not found!”);//文件未找到
return 0;
}
查找目錄下的所有文件中是否含有某個字符串
find .|xargs grep -ri “IBM”
查找目錄下的所有文件中是否含有某個字符串,并且只打印出文件名
find .|xargs grep -ri “IBM” -l
推薦使用正則表達式
?。?)正則表達式一般用來描述文本模式的特殊用法,由普通字符(例如字符a-z)以及特殊字符(稱為元字符,如/、*、?等)組成。
?。?)基本元字符集及其含義
^ :只匹配行首。 如^a 匹配以a開頭的行abc,a2e,a12,aaa,……
$ :只匹配行尾。 如^a 匹配以a結尾的行bca,12a,aaa,…….
* :匹配0個或多個此單字符。 如(a)* 匹配 空,a,aa,aaa,….
:只匹配內字符??梢允且粋€單字符,也可以是字符序列,用”,”將里面要匹配的不同字符串分開。也可以使用-來表示內字符序列的范圍,如表示
\ :只用來屏蔽一個元字符的特殊含義。 如\*,\’,\”,\|,\+,\^,\. 等
.:(點)只匹配任意單字符。
pattern\{n\}:只用來匹配前面pattern出現(xiàn)的次數(shù).n為次數(shù)。如a\{2\}匹配aa.
pattern\{n,\}:含義同上,但次數(shù)最少為n.如a\{2,\}匹配aa,aaa,aaaa,…..
pattern\{n,m\}:含義同上,但次數(shù)在n和m之間。如a\{2,4\}匹配aa,aaa,aaaa三個
(3)舉例說明:
^$ :匹配空行
^.$ :匹配包含一個字符的行
\*\.pas :匹配以*.pas結尾的所有字符或文件
或 :假定要匹配任意一個數(shù)字
:任意小寫字母
:任意大小寫字母
:匹配大小寫S
\{3\}\.\{3\}\.\{3\}\.\{3\} :匹配IP地址 \{3\}三個0-9組成的字符串;\. :匹配點(注意這里點是特殊的字符,所以要用”\”來屏蔽其含義)
可以試試 \ 轉義符
例子:
需求:要在test.log中匹配”respCode”:”00″,注意這里面包含”特殊符號,不包含:
只要輸入以下指令即可
grep ‘\”respCode\”:\”00\”‘ test.log
1. 試試用”\”進行轉義:
grep “aaa\/fz\|\\u963f\\u72f8\$” yourfile
2. 試試用awk,這個忘了是否需要轉義,你自己試試:
Linux sed 命令詳解
sed命令行格式:sed ‘command’ file(s)
options常用選項:
-n或–quiet或——silent:僅顯示script處理后的結果;
-e:以選項中的指定的script來處理輸入的文本文件;
-f:以選項中指定的script文件來處理輸入的文本文件;
-r∶sed 的動作支援的是延伸型正規(guī)表示法的語法;
-i∶直接修改讀取的檔案內容,而不是由螢幕輸出;
-h或–help:顯示幫助;
-V或–version:顯示版本信息。
Command常用命令:
a:新增,a 的后面可以接字符串,而這些字符串會在新的一行出現(xiàn)(目前的下一行);
c:取代,c 的后面可以接字符串,脊雀御這些字符串可以取代 n1,n2 之間的行;
d:刪除,d 后面通常不接任何字符串;
i:插入,i 的櫻巖后面可以接字符串,而這些字符串會在新的一行出現(xiàn)(目前的上一行);
p:列印,亦即將某個選擇的資料印出。通常 p 會與參數(shù) sed -n 一起運作;
s:取代,可以直接進行取代的工作,通常與正規(guī)表達式搭配使用。
實例說明:
新增操作:a命令
sed ‘/^bird/a\test’ file將test追加到 以bird開頭的行后面
刪除操作:d命令
sed ‘/^$/d’ file #刪除空白行;
sed ‘2d’ file #刪除第二行;
sed ‘2,$d’ file #刪除第2行到最后一行;
sed ‘$d’ file #刪除最后一行;
sed ‘/^bird/’d file #刪除所有開頭是bird的行;
插入操作:i命令
sed -i ‘3i\bird ‘ bird.conf #在bird.conf文件第3行之前插入bird
替換文本中的字符串:s命令
sed ‘s/bird/birds/’ file #將文本中的bird替換成birds;
sed -i ‘s/ bird / birds /g’ file #將file文件中每一行的之一個bird替換歲返為birds;
一、基本正則列表與擴展正則
二、sed 文本處理工具的用法介紹
三、認識sed工具的 n、r、i 選項指令
四、認識sed工具的 p、d、s 條件指令
五、認識sed工具的 i、a、c 條件指令
六、認識sed高級應用 r、w 條件指令
七、綜合案例
Linux sed
Stream EDitor,流式編輯器
一、基本正則列表與擴展正則
根據(jù)推出時間的不同,分為基本正則和擴展正則,擴展正則在基本正則的基礎上做了一些優(yōu)化和新增了一些正則表達符號,因為一些命令沒有及時更新,所以你可能會遇到有些命令只支持基本正則,不支持擴展正則,或者需要添加一些支持擴展正則的選項。
關于正則與擴展正則區(qū)別的詳細介侍伍孝紹可以看我另一篇shell 正則的介紹
基本正則列表
擴展正則列表
二、sed 文本處理工具的用法介紹:
相關說明如下:
sed命令的常用選項如下:
sed命令常用條件指令如下
三、認識sed工具的 n、r、i 選項指令
# sed ‘條件指令’ 文件.. ..
上面的條件指令 我們可以拆分為
# sed ‘范圍界定+操作指令’ 文件.. ..
的格式這樣更容易理解
sed命令可以使用行號或正則做為條件匹配:
1)sed命令的 -n 選項
執(zhí)行p打印等過濾操作時,希望看到的是符合條件老稿的文本。但不使用任何選項時,默認會將原始文本一并輸出,從而干擾過濾效果。比如,嘗試用sed輸出/etc/hosts的第1行:
可以發(fā)現(xiàn)所有的行都被顯示出來了(第1行重復2次)?!?正確的用法應該添加 -n 選項,這樣就可以只顯示第1行了:
行號可以是連續(xù)的行號,如打印passwd第3到第6行賬戶的信息:
2)sed命令的 -r 選項
需要用到擴展正則時,需要加 -r選項
3)sed命令的 -i 選項
正常情況下,sed命令所做的處理只是把操作結果(包括打印、刪除等)輸出到當前終端屏幕,而并不會對原始文件做任何更改:
若希望直接修改文件內容,應添加選項 -i 。
需要特別注意的是,和一些指令組合和使用的先后順序都會對最終輸出結果產生影響
例如: 指令 -n、和操作操作p
比如,直接刪除test.txt(自行創(chuàng)建一個任意內容的文件)的第1~4行:
下文中關于使用sed修改文件的示例中,為了避免大家在練習過程中因誤操作導致系統(tǒng)故障,命令省略 –i 選項,不再逐一說明。需要時,大家可自行加上此選項。
4)多個指令可以使用分號隔離
用分號來隔離多個操作,比如:
1)行號案例
2)正則案例
3)沒有條件,則表示匹配所有行
四、認識sed工具的 p、d、s 條件指令
1)下面看看sed工具的p指令案例集錦(自己提前生成一個a.txt文件)
2)下面看看sed工具的d指令案例集錦(自己提前生成一個a.txt文件)
3)sed命令的s替換基本功能(s/舊內容/新內容/選項):
4)下面看看sed工具的s指令案例集錦(自己提前生成一個a.txt文件)
注意:替換操作的分隔“/”可改用其他字符,如#、&等,便于修改文件路徑
以下操作使用nssw.txt作為測試文件。
參考數(shù)據(jù)文件內容如下:
5)刪除文件中每行的第二個、最后一個字符
分兩次替換操作,之一次替換掉第2個字符,第二次替換掉最后一個字符:
6)將文件中每行的之一個、倒數(shù)第1個字符互換
每行文本拆分為“第1個字符”、“中間的橘配所有字符”、“倒數(shù)第1個字符”三個部分,然后通過替換操作重排順序為“3-2-1”:
7)刪除文件中所有的數(shù)字
因原文件內沒有數(shù)字,行首也沒有空格,這里在內容中新增一些數(shù)字另外新幾行內容 首行添加幾行空格,生成一個新測試文件以 nssw2.txt
以nssw2.txt文件為例,刪除所有數(shù)字、行首空格的操作如下:
8)為文件中每個大寫字母添加括號
使用“()”可實現(xiàn)保留功能,所以可參考下列操作解決:
五、認識sed工具的 i、a、c 條件指令
# sed ‘條件指令’ 文件..
sed工具的多行文本處理操作:
基本語法格式案例:
1)sed命令的 i 指定行之前插入基本功能
2)sed命令的a追加基本功能
3)sed命令的c替換基本功能
六、認識sed高級應用 r、w 條件指令
1)sed命令的 r 讀取文件
2)sed命令的 w 保存到文件
七、綜合案例
1) 綜合案例1
linux字符串匹配某一行的介紹就聊到這里吧,感謝你花時間閱讀本站內容,更多關于linux字符串匹配某一行,Linux命令:字符串匹配某一行,求助Linux下帶特殊字符的字符串查找方法!,Linux sed 命令詳解的信息別忘了在本站進行查找喔。
成都創(chuàng)新互聯(lián)科技有限公司,是一家專注于互聯(lián)網(wǎng)、IDC服務、應用軟件開發(fā)、網(wǎng)站建設推廣的公司,為客戶提供互聯(lián)網(wǎng)基礎服務!
創(chuàng)新互聯(lián)(www.cdcxhl.com)提供簡單好用,價格厚道的香港/美國云服務器和獨立服務器。創(chuàng)新互聯(lián)成都老牌IDC服務商,專注四川成都IDC機房服務器托管/機柜租用。為您精選優(yōu)質idc數(shù)據(jù)中心機房租用、服務器托管、機柜租賃、大帶寬租用,可選線路電信、移動、聯(lián)通等。
文章名稱:Linux命令:字符串匹配某一行(linux字符串匹配某一行)
URL標題:http://www.5511xx.com/article/dhgpjjg.html


咨詢
建站咨詢
