以下內容首發自公眾號「小汪Waud」。
本期介紹在Linux環境下的正則表達式及grep命令。
正則表達式(Regular Expression)是對字元串操作的一種邏輯公式,就是用事先定義好的一些特定字元及這些字元的特定組合,組成一個「規則字元串」,這個字元串用來表達對字元串的一種過濾邏輯。
正則表達式基本上是一種表示法,只要程序支持這種表示法,該程序就可以用來作為正則表達式的字元串處理之用。如vi、grep、awk、sed等程序支持正則表達式,所以可以使用正則表達式的特殊字元來進行字元串的處理。但例如cp、ls等命令並不支持正則表達式,所以只能用自己的通配符。
正則表達式依照 不同的嚴謹度 分為:基礎正則表達式和擴展正則表達式。
注意!
grep是一種強大的文本搜索工具,可以使用 正則表達式匹配模式 查找文件里符合條件的字元串,並列印出來。
有點類似於WORD里的查找功能。
grep支持三種正則表達式語法:Basic、Extended和perl兼容。 如果沒有提供正則表達式類型,grep將搜索模式解釋為基本的正則表達式。要將模式解釋為擴展正則表達式,請使用-E。
查看grep的幫助文檔,如下
基本用法
grep [OPTION]... PATTERN [FILE]...
高級用法
grep [-A] [-B] [--color=auto] "查找字元" [模式] [文件]
常用參數
首先通過cat命令查看samples.txt的內容,如下圖
如果想檢索以K為行首的行,通過以下命令即可得到
如果想檢索以Z為行尾的行,通過以下命令即可得到
如果想檢索三個字元其中前面為K,後面為D中間字元,為任意字元,通過以下命令即可得到
參考資料
https://www.runoob.com/linux/linux-comm-grep.html
https://www.bilibili.com/video/BV1Yy4y117SX?p=12
⑵ linux命令grep
grep搜索成功,則返回0,如果搜索不成功,則返回1,如果搜索的文件不存在,則返回2。
-n 列印行號
grep -n ".*" h.txt 所有列印行號
grep -n "root" h.txt 匹配的內容顯示行號
-v 不包括
-E 表示過濾 多個參數
grep -Ev "sshd|network|crond|sysstat|"
-o:僅列印你需要的東西,默認列印正行
grep -o "hello" h.txt
-i:忽略大小寫
grep -i "hello" h.txt
-c: 用於統計文中出現的次數
--color=auto 過濾欄位添加顏色
\b:作為邊界符,邊界只包含特定字元的行
grep "\boldboy\b" /etc/passwd -->只過濾包含oldboy的行
從多個文件中查找關鍵詞
grep "omc" /etc/passwd /etc/shadow
數據去重:cat log | sort | uniq
⑶ Linux下Grep命令的詳細使用方法
在linux中grep命令是非常有用的,它和管道(|)配合使用,非常強大,用於搜索文本文件.如果想要在幾個文本文件中查找一字元串,可以使用『grep』命令。『grep』在文本中搜索指定的字元串。
假設您正在『/usr/src/linux/Documentation』目錄下搜索帶字元串『magic』的文件:
$ grep magic /usr/src/linux/Documentation/*
sysrq.txt:* How do I enable the magic SysRQ key?
sysrq.txt:* How do I use the magic SysRQ key?
其中文件『sysrp.txt』包含該字元串,討論的是 SysRQ 的功能。
默認情況下,『grep』只搜索當前目錄。如果此目錄下有許多子目錄,『grep』會以如下形式列出:
grep: sound: Is a directory
這可能會使『grep』的輸出難於閱讀。這里有兩種解決的辦法:
明確要求搜索子目錄:grep -r
或忽略子目錄:grep -d skip
當然,如果預料到有許多輸出,您可以通過 管道 將其轉到『less』上閱讀:
$ grep magic /usr/指汪src/linux/Documentation/* | less
這樣,您就可以更方便地閱讀。
有一點要注意,您必需提供一個文件過濾方式(搜索全部文件的話用 *)。如果您忘了,『grep』會一直等著,直到該程序被中斷。如果您遇到了這樣的情況,按
下面是一些有意思的命令行參數:
grep -i pattern files :不區分大小寫地搜索。默認情況區分大小寫,
grep -l pattern files :只列出匹配的文件名,
grep -L pattern files :列出不匹配的文件名,
grep -w pattern files :只匹配整個單詞,而不是字元串的一部分(如匹配『magic』,而不是『magical』),
grep -C number pattern files :匹配的上下文分別顯示[number]行,
grep pattern1 | pattern2 files :顯示匹配 pattern1 或 pattern2 的行,
grep pattern1 files | grep pattern2 :顯示既匹配 pattern1 又匹配 pattern2 的行。
這里還有些用於搜索的特殊符號:
\< 和 \> 分別標注單詞的開始與結尾。
例如:
grep man * 會匹配 『Batman』、『manic』、『man』等,
grep '\
'^':指匹配的字元串在行首,
'$':指匹配的字元串在行尾,
如果您不習慣命令行參數,可以試試圖形界雹逗伏面的『grep』,如 reXgrep 。這個軟體提供 AND、OR、NOT 等語法,還有漂亮的按鈕 :-) 。如果您只是需要更清楚的輸出,不妨試試 fungrep 。
⑷ Linux命令之sed-替換字元串
1. sed -i 's/CANCEL_TIME/CANCEL_RECV_TIME/g' csv2drds-TF_B_PAYLOG_D.json
---指定文件替換,將文件中的CANCEL_TIME替換成CANCEL_RECV_TIME;
2. sed -i 's/CANCEL_TIME/CANCEL_RECV_TIME/g' `grep CANCEL_TIME -rl ./*TF_B_PAYLOG_D*.json`
---批量文件替換,遞歸查找含CANCEL_TIME的文件,將所有文件中的CANCEL_TIME替換成CANCEL_RECV_TIME;
3. sed -i 's/\/tmp\/ditagent\/TF_B_PAYLOG_D.csv/\/vdata\/datapre\/281\/'"$filename"'/g' $jsonname
---帶/的字元串替換,將/tmp/ditagent/TF_B_PAYLOG_D.csv替換成/vdata/datapre/281/'"$filename"'
4. sed -i 's/^/beginstring&/g' *.txt
---在所有行首添加字元串;
5. sed -i 's/$/&endstring/g' *.txt
---在所有行末添加字元串
6. sed -i '2s/原字元串/替換字元串/g' *.txt
---替換第2行
7. sed -i '$s/原字元串/替換字元串/g' *.txt
---替換最後一行
8. sed -i '2,5s/原字元串/替換字元串/g' *.txt
---替換2到5行
9. sed -i '2,$s/原字元串/替換字元串/g' *.txt
---替換2到最後一行
10. sed 's/\x80/|/g' test.dat |iconv -f gbk -t utf-8 > testutf8.dat
---把test.dat中的歐元符號替換成豎線,再將文件gbk格式轉成utf8
-i選項是直接在文件中替換,不在終端輸出;
-r選項是所給的path中的目錄遞歸查找;
-l選項是輸出所有匹配到oldstring的文件;
s/表示替換
/g表示全局替換
⑸ Linux使用sed命令添加字元串方法教程
通常在Linux中添加字元串可以用命令實現,有很多種方式,有一種就是在文本的首尾行添加字元串。那麼具體怎麼使用呢?本文就來介紹一下Linux使用sed命令添加字元串的方法。
用sed命令在行首或行尾添加字元的命令有以下幾種:
假設處理的文本為test.file
在每行的頭添加字元,比如“HEAD”,命令如下:
sed ‘s/^/HEAD&/g’ test.file
在每行的行尾添加字元,比如“TAIL”,命令如下:
sed ‘s/$/&TAIL/g’ test.file
4.也可以把兩條命令和在一起,在test.file的每一行的行頭和行尾分別添加字元“HEAD”、“TAIL”,命令:sed ‘/。/{s/^/HEAD&/;s/$/&TAIL/}’ test.file
以上其實都還OK,昨天花太多時間,主要因為被處理的文件是用mysql從資料庫提取的結果導出來的,別人給我之後我就直接處理,太腦殘了= -我一直有點懷疑之所以結果不對,有可能是windows和linux換行的問題,可是因為對sed不熟,就一直在搞sed。
眾所周知(= -),window和linux的回車換行之雲雲,如果你知道了,跳過這一段,不知道,讀一下唄:
Unix系統里,每行結尾只有“《換行》”,即“ ”;Windows系統裡面,每行結尾是“《換行》《回 車》”,即“ ”。一個直接後果是,Unix系統下的文件在Windows里打開的話,所有文字會變成一行;而Windows里的文件在 Unix下打開的話,在每行的結尾可能會多出一個^M符號。
好了,所以我的問題就出在被處理的文件的每行末尾都有^M符號,而這通常是看不出來的。可以用“cat -A test.file”命令查看。因此當我想在行尾添加字元的時候,它總是添加在行首且會覆蓋掉原來行首的字元。
補充:系統常用維護技巧
1,在 “開始” 菜單中選擇 “控制面板” 選項,打開 “控制面板” 窗口,單擊 “管理工具” 鏈接
2,在打開的 “管理工具” 窗口中雙擊 “事件查看器” 圖標
3, 接著會打開 “事件查看器” 窗口
4,在右側窗格中的樹狀目錄中選擇需要查看的日誌類型,如 “事件查看器本地--Win日誌--系統日誌,在接著在中間的 “系統” 列表中即查看到關於系統的事件日誌
5,雙擊日誌名稱,可以打開 “事件屬性” 對話框,切換到 “常規” 選項卡,可以查看該日誌的常規描述信息
6,切換到 “詳細信息” 選項卡,可以查看該日誌的詳細信息
7,打開 “控制面板” 窗口,單擊 “操作中心” 鏈接,打開 “操作中心” 窗口,展開 “維護” 區域
8,單擊 “查看可靠性歷史記錄” 鏈接,打開 “可靠性監視程序” 主界面,如圖所示, 用戶可以選擇按天或者按周為時間單位來查看系統的穩定性曲線表,如果系統近日沒出過什麼狀況, 那麼按周來查看會比較合適。觀察圖中的曲線可以發現,在某段時間內,系統遇到些問題,可靠性指數曲線呈下降的趨勢,並且在這段時間系統遇到了三次問題和一次警告,在下方的列表中可以查看詳細的問題信息。
相關閱讀:系統故障導致死機怎麼解決
1、病毒原因造成電腦頻繁死機
由於此類原因造成該故障的現象比較常見,當計算機感染病毒後,主要表現在以下幾個方面:
①系統啟動時間延長;
②系統啟動時自動啟動一些不必要的程序;
③無故死機
④屏幕上出現一些亂碼。
其表現形式層出不窮,由於篇幅原因就介紹到此,在此需要一並提出的是,倘若因為病毒損壞了一些系統文件,導致系統工作不穩定,我們可以在安全模式下用系統文件檢查器對系統文件予以修復。
2、由於某些元件熱穩定性不良造成此類故障(具體表現在CPU、電源、內存條、主板)
對此,我們可以讓電腦運行一段時間,待其死機後,再用手觸摸以上各部件,倘若溫度太高則說明該部件可能存在問題,我們可用替換法來診斷。值得注意的是在安裝CPU風扇時最好能塗一些散熱硅脂,但我在某些組裝的電腦上卻是很難見其蹤影,實踐證明,硅脂能降低溫度5—10度左右,特別是P Ⅲ 的電腦上,倘若不塗散熱硅脂,計算機根本就不能正常工作,曾遇到過一次此類現象。該機主要配置如下:磐英815EP主板、PⅢ733CPU、133外頻的128M內存條,當該機組裝完後,頻繁死機,連Windows系統都不能正常安裝,但是更換賽揚533的CPU後,故障排除,懷疑主板或CPU有問題,但更換同型號的主板、CPU後該故障也不能解決。後來由於發現其溫度太高,在CPU上塗了一些散熱硅脂,故障完全解決。實踐證明在賽揚533以上的CPU上必須要塗散熱硅脂,否則極有可能引起死機故障。
3、由於各部件接觸不良導致計算機頻繁死機
此類現象比較常見,特別是在購買一段時間的電腦上。由於各部件大多是靠金手指與主板接觸,經過一段時間後其金手指部位會出現氧化現象,在拔下各卡後會發現金手指部位已經泛黃,此時,我們可用橡皮擦來回擦拭其泛黃處來予以清潔。
4、由於硬體之間不兼容造成電腦頻繁死機
此類現象常見於顯卡與其它部件不兼容或內存條與主板不兼容,例如SIS的顯卡,當然其它設備也有可能發生不兼容現象,對此可以將其它不必要的設備如Modem、音效卡等設備拆下後予以判斷。
5、軟體沖突或損壞引起死機
此類故障,一般都會發生在同一點,對此可將該軟體卸掉來予以解決。
⑹ linux常用命令有哪些
linux常用命令有pwd命令、cd命令、ls命令、cat命令、grep命令、touch命令、cp命令、mv命令、rm命令、rmdir命令等。
linux常用命令:
1、 pwd命令
該命令的英文解釋為print working directory(列印工作目錄)。輸入pwd命令,Linux會輸出當前目錄。
2、 cd命令
cd命令用來改變所在目錄。
cd / 轉到根目錄中
cd ~ 轉到/home/user用戶目錄下
cd /usr 轉到根目錄下的usr目錄中-------------絕對路徑
cd test 轉到當前目錄下的test子目錄中-------相對路徑
3、 ls命令
ls命令用來查看目錄的內容。 選項 含義 -a 列舉目錄中的全部文件,包括皮帆大隱藏文件 -l 列舉目錄中的細節,包括許可權、所有者、組群、大小、創轎褲建日期、文件是否是鏈接等 -f 列舉的文件顯示文件類型 -r 逆向,從後向前地列舉目錄中內容 -R 遞歸,該選項遞歸地列舉當前目錄下所有子目錄內的內容 -s 大小,按文件大小排序 -h 以人類可讀的方式顯示文件的大小,如用K、M、G作單位 ls -l examples.doc 列舉文件examples.doc的所有信息
4、 cat命令
cat命令可以用來合並文件,也可以用來在屏幕上顯示整個文件的內容。
cat snow.txt 該命令顯示文件snow.txt的內容,ctrl+D退出cat。
5、 grep命令
grep命令的最大功能是在一堆文件中查找一個特定的字元串。
grep money test.txt
以上命令在test.txt中查找money這個字元串,grep查找是區分大小寫的。
6 、touch命令
touch命令用來創建新文件,他可以創建一個空白的文件,可以在其中添加文本和數據。
touch newfile 該命令創建一個名為newfile的空白文件。
7 、cp命令
cp命令用來拷貝文件,要復制文件,輸入命令:
cp
cp t.txt Document/t 該命令將把文件t.txt復制到Document目錄下,並命名為t。 選項 含義 -i 互動:如果文件將覆蓋目標中的文件,他會提示確認 -r 遞歸:這個選項會復制整個目錄樹、子目錄以及其他 -v 詳細:顯示文件的復制進度
8 、mv命令
mv命令用來移動文件。 選項 說明 -i 互動:如果選擇的文件會覆蓋目標中的文件,他會提示確認 -f 強制:它會超越互動模式,不提示地移動文件,屬於很危險的選項 -v 詳細:顯示文件的移動進度
mv t.txt Document 把文件t.txt 移動到目錄Document中。
9 、rm命令
rm命令用來刪除文件。 選項 說明 -i 互動:提示確認刪除 -f 強制:代替互動模式,不提示確認刪除 -v 詳細:顯示文件的刪除進度 -r 遞歸:將刪除某個目錄以及其中所有的文件和子目錄
rm t.txt 該命令刪除文件t.txt
10、 rmdir命令
rmdir命令用來刪燃豎除目錄。
⑺ Linux命令行操作之sed
sed命令行格式:sed [options] 'command' file(s)
options常用選項:
-n或--quiet或——silent:僅顯示script處理後的結果;
-e:以選項中的指定的script來處理輸入的文本文件;
-f:以選項中指定的script文件來處理輸入的文本文件;
-r∶sed 的動作支援的是延伸型正規表示法的語法;
-i∶直接修改讀取的檔案內容,而不是由螢幕輸出;
-h或--help:顯示幫助;
-V或--version:顯示版本信息。
Command常用命令:
a:新增,a 的後面可以接字元串,而這些字元串會在新的一行出現(目前的下一行);
c:取代,c 的後面可以接字元串,這些字元串可以取代 n1.n2 之間的行;
d:刪除,d 後面通常不接任何字元串;
i:插入,i 的後面可以接字元串,而這些字元串會在新的一行出現(目前的上一行);
p:列印,亦即將某個選擇的資料印出。通常 p 會與參數 sed -n 一起運作;
s:取代,可以直接進行取代的工作,通常與正規表達式搭配使用。
實例說明:
新增操作:a命令
sed '/^bird/a est' 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 '3iird ' bird.conf #在bird.conf文件第3行之前插入bird
替換文本中的字元串:s命令
sed 's/bird/birds/' file #將文本中的bird替換成birds;
sed -i 's/ bird / birds /g' file #將file文件中每一行的第一個bird替換為birds;
⑻ Linux字元串搜索命令
1、grep [選項] 字元串 文件名(在文件中匹配符合條件的字缺搭悶符串)
選項:
-i 忽略大小寫
-v 排除指定的字元串
例子:
grep "test" a.txt(在a.txt中搜索匹配test的字元串)
注意:
find命令:在系統中搜符合條件文件名,使伏彎用通用符,通用符是完全匹配
grep命令:在文件中搜枝枝索符合條件字元串,使用正則匹配,正則包含匹配
⑼ Linux中使用grep命令,查詢多個字元串
grep 搜索同時滿足多個關鍵字和滿足任意關鍵字
1、 grep -E "word1|word2|word3" file.txt
滿足任意條件(word1、word2和word3之一)將匹配。
這樣也可以
egrep 'word1|word2|word3' 文件名
grep 'word1/|word2|word3' 文件名
錯誤的:
grep 'word1|word2|word3'
2、 grep word1 file.txt | grep word2 |grep word3
必須同時滿足三個條件(word1、word2和word3)才匹配。
為什麼需要加-E