新聞中心
在Linux下編寫C程序時(shí),經(jīng)常需要查找文件中的某個(gè)字符串。本文將介紹如何在C文件中查找字符串的方法,以方便讀者更好地編寫C程序。

一、使用系統(tǒng)命令
在Linux中,可以使用grep命令來查找文件中的字符串。grep命令的基本格式為:
“`sh
grep [選項(xiàng)] [字符串] [文件名]
“`
例如,在當(dāng)前目錄下查找所有包含“hello”的文件,可以使用以下命令:
“`sh
grep -rn “hello” .
“`
其中,-r表示遞歸查找,-n表示打印匹配的行號(hào),”.”表示當(dāng)前目錄。
如果想要查找字符串出現(xiàn)的次數(shù),則可以使用以下命令:
“`sh
grep -oc “hello” file.txt
“`
其中,-o表示只輸出匹配的部分,-c表示統(tǒng)計(jì)匹配的次數(shù)。
在C程序中,可以通過system函數(shù)來調(diào)用grep命令。例如:
“`c
#include
#include
int mn()
{
system(“grep -rn \”hello\” .”);
return 0;
}
“`
以上代碼執(zhí)行后,會(huì)在終端輸出所有包含“hello”的文件和相應(yīng)的行號(hào)。
二、使用文件流
除了使用系統(tǒng)命令,還可以使用C語言中的文件流來查找字符串。具體步驟如下:
1. 打開文件
可以使用fopen函數(shù)來打開文件。fopen函數(shù)的基本格式為:
“`c
FILE *fopen(const char *filename, const char *mode);
“`
其中,filename表示要打開的文件名,mode表示打開文件的方式。在查找字符串時(shí),應(yīng)該以只讀方式打開文件,代碼如下:
“`c
FILE *fp;
fp=fopen(“file.txt”, “r”);
if(fp==NULL)
{
printf(“File open error!\n”);
return -1;
}
“`
2. 逐行讀取文件內(nèi)容
可以使用fgets函數(shù)逐行讀取文件內(nèi)容。fgets函數(shù)的基本格式為:
“`c
char *fgets(char *str, int n, FILE *stream);
“`
其中,str表示讀取的字符串,n表示最多讀取的字符數(shù),stream表示要讀取的文件流。在讀取文件內(nèi)容時(shí),可以將每行內(nèi)容存儲(chǔ)到一個(gè)字符串?dāng)?shù)組中。
“`c
char buf[1024];
while(fgets(buf, 1024, fp))
{
//處理每行內(nèi)容
}
“`
3. 查找字符串
在每行內(nèi)容中查找字符串,可以使用strstr函數(shù)。strstr函數(shù)的基本格式為:
“`c
char *strstr(const char *haystack, const char *needle);
“`
其中,haystack表示要搜索的字符串,needle表示要查找的子字符串。如果找到了,strstr函數(shù)將返回之一次出現(xiàn)的位置,否則返回NULL。代碼如下:
“`c
char *pos;
while(fgets(buf, 1024, fp))
{
pos=strstr(buf, “hello”);
if(pos!=NULL)
{
printf(“Line: %s\n”, buf);
}
}
“`
4. 關(guān)閉文件
文件使用完畢后,應(yīng)該及時(shí)關(guān)閉??梢允褂胒close函數(shù)來關(guān)閉文件,代碼如下:
“`c
fclose(fp);
“`
以上是使用文件流查找字符串的基本步驟。在實(shí)際編寫時(shí),可以根據(jù)具體需求進(jìn)行靈活調(diào)整,從而實(shí)現(xiàn)更加高效和精準(zhǔn)的字符串查找。
:
相關(guān)問題拓展閱讀:
- linux怎樣查找以某個(gè)字母打頭的文件或文件夾?
linux怎樣查找以某個(gè)字母打頭的文件或文件夾?
ls -al |grep c* 這樣就可以了,運(yùn)用管道命令|。
如何使用命令行在Linux中查找文件和文件夾
使用查找命令,“find”命令允許您搜索知道近似文件名的文件。該命令的最簡單形式在當(dāng)前目錄中搜索文件,并遞歸地通過其與所提供的搜索條件匹配的子目錄。您可以按名稱,所有者,組,類型,權(quán)限,日期和其他條件搜索文件。
在提示符下鍵入以下命令將列出當(dāng)前目錄中的所有文件。
“find”后的點(diǎn)表示當(dāng)前目錄。
要查找符合特定模式的文件,請(qǐng)使用-name參數(shù)。您可以使用文件名元字符(例如*),但您應(yīng)該將一個(gè)轉(zhuǎn)義字符(\)放在每個(gè)字符之前或?qū)⑺鼈兝ㄔ谝?hào)中。
例如,如果要在Documents目錄中找到以“pro”開頭的所有文件,我們將使用該cd Documents/命令更改為Documents目錄,然后鍵入以下命令:
find . -name pro\*
列出以“pro”開頭的當(dāng)前目錄中的所有文件。
注意:find命令默認(rèn)為區(qū)分大小寫。如果要搜索單詞或短語不區(qū)分大小寫,請(qǐng)使用-inamefind命令中的選項(xiàng)。這是-name命令的不區(qū)分大小寫的版本。
如果find沒有找到符合條件的任何文件,則不會(huì)產(chǎn)生任何輸出。
find命令有很多選項(xiàng)可用于完善搜索。有關(guān)find命令的更多信息,請(qǐng)man find 在“終端”窗口中運(yùn)行,然后按Enter鍵。
使用定位命令
locate命令比find命令更快,因?yàn)樗褂昧讼惹皹?gòu)建的數(shù)據(jù)庫,而find命令通過所有實(shí)際目錄和文件在實(shí)際系統(tǒng)中進(jìn)行搜索。locate命令返回包含指定字符組的所有路徑名的列表。
數(shù)據(jù)庫從cron定期更新,但您也可以隨時(shí)更新數(shù)據(jù),以便您可以獲得最新的結(jié)果。為此,請(qǐng)?jiān)谔崾痉骆I入以下命令:
sudo updatedb
出現(xiàn)提示時(shí)輸入密碼。
locate命令的基本形式從文件系統(tǒng)中找到包含搜索條件全部或部分內(nèi)容的所有文件。
locate mydata
例如,上面的命令發(fā)現(xiàn)了兩個(gè)包含“mydata”的文件和一個(gè)包含“數(shù)據(jù)”的文件
如果要查找包含完全唯一的搜索條件的所有文件或目錄,請(qǐng)使用-blocate命令中的選項(xiàng),如下所示。
locate-b’\ mydata’御彎
上述命令中的反斜杠是一個(gè)globbing字符,它提供了將非特定文件名中的通配符擴(kuò)展成一組特定文件名的方法。通配符是表達(dá)式被評(píng)估時(shí)可以被一個(gè)或多個(gè)字符替換的符號(hào)。最常見的通配符是問號(hào)(?),它表示單個(gè)字符,而asterisk(*)表示連續(xù)的字符串。在上面的例子中,反斜杠禁用“* mydata *”隱式替換“mydata”,所以最終只能包含“mydata”的結(jié)果。
mlocate命令是一個(gè)新的locate的實(shí)現(xiàn)。它索引整個(gè)文件系統(tǒng),但搜索結(jié)果只包含當(dāng)前用戶可訪問的文件。更新mlocate數(shù)據(jù)庫時(shí),它會(huì)在數(shù)據(jù)庫中保留時(shí)間戳信息。這允許mlocate知道目錄中的內(nèi)容是否更改慶正,而不再讀取內(nèi)容,并使數(shù)據(jù)庫更新速度更快,對(duì)硬盤驅(qū)動(dòng)器的要求也更低。
當(dāng)您安裝mlocate時(shí),/ usr / bin / locate二進(jìn)制文件更改為指向mlocate。要安裝mlocate,如果尚未包括在Linux發(fā)行版中,請(qǐng)?jiān)谔崾痉骆I入以下命令。
sudo apt-get install mlocate
注意:我們將在本文后面顯示一條命令,允許您確定命令的可執(zhí)行文件所在的位置(如果存在)。
mlocate命令不使用與標(biāo)準(zhǔn)locate命令相同的數(shù)據(jù)庫文件。因此,您可能需要在提示符下鍵入以下命令手動(dòng)創(chuàng)建數(shù)據(jù)庫:
sudo /etc/cron.daily/mlocate
在數(shù)據(jù)庫手動(dòng)創(chuàng)建數(shù)據(jù)庫或從cron運(yùn)行腳本之前,mlocate命令將不起作用。
有關(guān)locate或mlocate命令的詳細(xì)信息,請(qǐng)鍵入man locate或man mlocate 在“終端”窗口中,然后按Enter鍵。兩個(gè)命令顯示相同的幫助屏幕。
使用哪個(gè)命令
“which”命令返回發(fā)出命令時(shí)調(diào)用的可執(zhí)行文件的絕對(duì)路徑。這在找到用于在桌面,面板或桌面管理器鎮(zhèn)差悶中的其他位置創(chuàng)建程序的快捷方式時(shí)可用于查找可執(zhí)行文件的位置。例如,鍵入命令將which firefox 顯示下圖中顯示的結(jié)果。
默認(rèn)情況下,哪個(gè)命令只顯示之一個(gè)匹配的可執(zhí)行文件。要顯示所有匹配的可執(zhí)行文件,請(qǐng)使用-a以下命令的選項(xiàng):
這是一個(gè)firefox
您可以一次搜索多個(gè)可執(zhí)行文件,如下圖所示。只顯示找到的可執(zhí)行文件的路徑。在下面的例子中,只發(fā)現(xiàn)了“ps”可執(zhí)行文件。
注意:哪個(gè)命令只搜索當(dāng)前用戶的PATH變量。如果搜索只能作為普通用戶使用的root用戶的可執(zhí)行文件,則不會(huì)顯示任何結(jié)果。
有關(guān)哪個(gè)命令的更多信息,請(qǐng)?jiān)诮K端窗口中的命令提示符下鍵入“man which”(不帶引號(hào)),然后按Enter鍵。
使用Whereis命令
whereis命令用于查找命令的二進(jìn)制文件,源文件和手冊(cè)頁文件所在的位置。例如,whereis firefox 在提示符下輸入將顯示如下圖所示的結(jié)果
如果您只想要顯示可執(zhí)行文件的路徑,而不是源和路徑(man(頁)),請(qǐng)使用該-b選項(xiàng)。例如,該命令whereis -b firefox將僅顯示/usr/bin/firefox為結(jié)果。這很方便,因?yàn)槟赡軙?huì)比搜索該程序的源頁面和手冊(cè)頁更頻繁地搜索程序的可執(zhí)行文件。您也可以僅搜索源文件(-s)或僅搜索手冊(cè)頁(-m)。
有關(guān)whereis命令的詳細(xì)信息,請(qǐng)鍵入man whereis 終端窗口,然后按Enter鍵。
了解Whereis命令與哪個(gè)命令之間的區(qū)別
whereis命令顯示命令的二進(jìn)制,源和手冊(cè)頁的位置,而哪個(gè)命令僅顯示命令的二進(jìn)制文件的位置。
whereis命令搜索二進(jìn)制,源和man文件的特定目錄列表,而哪個(gè)命令搜索當(dāng)前用戶的PATH環(huán)境變量中列出的目錄。對(duì)于whereis命令,可以在命令的手冊(cè)頁的FILES部分中找到具體目錄的列表。
當(dāng)涉及默認(rèn)顯示的結(jié)果時(shí),whereis命令顯示它找到的所有內(nèi)容,而哪個(gè)命令只顯示找到的之一個(gè)可執(zhí)行文件。您可以使用-a前面討論過的選項(xiàng)來更改該命令。
因?yàn)閣hereis命令只使用硬編碼到命令中的路徑,所以您可能并不總是找到您要查找的內(nèi)容。如果您正在搜索一個(gè)程序,則認(rèn)為可能安裝在whereis命令的手冊(cè)頁中未列出的目錄中,您可能希望使用該-a選項(xiàng)以查找系統(tǒng)中所有出現(xiàn)的命令,
linux c 文件查找字符串的介紹就聊到這里吧,感謝你花時(shí)間閱讀本站內(nèi)容,更多關(guān)于linux c 文件查找字符串,Linux C文件中查找字符串的方法,linux怎樣查找以某個(gè)字母打頭的文件或文件夾?的信息別忘了在本站進(jìn)行查找喔。
成都網(wǎng)站設(shè)計(jì)制作選創(chuàng)新互聯(lián),專業(yè)網(wǎng)站建設(shè)公司。
成都創(chuàng)新互聯(lián)10余年專注成都高端網(wǎng)站建設(shè)定制開發(fā)服務(wù),為客戶提供專業(yè)的成都網(wǎng)站制作,成都網(wǎng)頁設(shè)計(jì),成都網(wǎng)站設(shè)計(jì)服務(wù);成都創(chuàng)新互聯(lián)服務(wù)內(nèi)容包含成都網(wǎng)站建設(shè),小程序開發(fā),營銷網(wǎng)站建設(shè),網(wǎng)站改版,服務(wù)器托管租用等互聯(lián)網(wǎng)服務(wù)。
當(dāng)前文章:Linux C文件中查找字符串的方法 (linux c 文件查找字符串)
標(biāo)題URL:http://www.dlmjj.cn/article/dhjodjc.html


咨詢
建站咨詢
