⑴ 在linux操作系統中,如何單獨的用grep或者是其它命令獲取搜索關鍵詞所在行除去關鍵詞後的內容
sed後項引用
abc defg
sed 's@^\(ab\)c([[:space:]].*)@\1@'
ab defg
大概就是這個意思
⑵ 從linux指令的結果中過濾出需要的部分並寫入指定文件
Linux下可以用sed命令向文件中追加內容。
案例:把/etc/test1文件中1-10行內容寫入到test2中
12
sed
-n
'1,10'p
/etc/test1
>>test2#將file1的1-10行追加到file2
sed命令行格式為:sed
[-nefri]
『command』
輸入文本
常用選項:-n∶使用安靜(silent)模式;
-e∶直接在指令列模式上進行
sed
的動作編輯;
-f∶直接將
sed
的動作寫在一個檔案內;
-r∶sed
的動作支援的是延伸型正規表示法的語法;
-i∶直接修改讀取的檔案內容,而不是由螢幕輸出。
⑶ 如何通過linux命令根據某一列值唯一來過濾
你可以這樣做:
(1)為Server的那些使用者建立單獨的賬戶,例如:user01、user02....等等(可以給每個人建立一個單獨的賬戶。當然,為了使系統中的賬戶不至於太多而導致難以管理,也可以按照他們所在的部門、項目組(或工作組)、或是其它分類方式去建立賬戶)。
(2)對每個賬戶下的$HOME/.profile文件或者是$HOME/.cshrc文件(視不同用戶的SHELL來決定,例如:bsh和sh就是.profile,csh就是.cshrc),用
chown root:root ... (例如: chown root:root .cshrc)
命令將它們改成root用戶及屬組所有,只有root用戶才可以更改它們。
(3)在每個用戶的$HOME/.profile或是$HOME/.cshrc等shell環境配置文件中,將你認為是危險的命令做以下的轉換:
alias 命令名='echo 管理員不運行執行該命令'
例如: alias format='echo 管理員不運行執行該命令'
這樣這些用戶就無法執行你限定的命令,執行之後都顯示「管理員不運行執行該命令」。
如果覺得改.profile或是.cshrc文件不保險,還可以在每個用戶的$HOME下建立.login文件,也用上述的方法將它改成root用戶屬組的,在裡面加入
alias 命令名='echo 管理員不運行執行該命令'
效果更好。
----看到了你的問題追加。我覺得要是大家都只能使用root賬戶,那麼這個系統的規劃是否合理?假如一定都要使用root賬戶的話,對於每個用戶在鍵入命令的過程中,你很難去捕獲他們都正在敲入什麼命令。只有等他們在命令行上都輸入完了,回車確認之後才可能去發現他們執行的進程。假如真有這樣的一個監控程序在你的系統中,就算是監控到了,那麼那些進程已經開始運行了,對很多人來說已經是無法收拾了,只有及時的殺掉那些進程了。建議你把敏感的命令給rename了算了,例如mv format frmt
⑷ linux如何在日誌中查找關鍵字
兩種方法:一種是直接進入編輯模式,vi進入後,通過匹配關鍵字查找你要的東西;一種是直接cat文件然後grep關鍵字。
拓展:
1、Linux操作系統是基於UNIX操作系統發展而來的一種克隆系統,它誕生於1991 年的 [Linux桌面] 10 月5 日(這是第一次正式向外公布的時間)。以後藉助於Internet網路,並通過全世界各地計算機愛好者的共同努力,已成為今天世界上使用最多的一種UNIX 類操作系統,並且使用人數還在迅猛增長。
2、Linux是一套免費使用和自由傳播的類Unix操作系統,是一個基於POSIX和UNIX的多用戶、多任務、支持多線程和多CPU的操作系統。它能運行主要的UNIX工具軟體、應用程序和網路協議。它支持32位和64位硬體。Linux繼承了Unix以網路為核心的設計思想,是一個性能穩定的多用戶網路操作系統。它主要用於基於Intel x86系列CPU的計算機上。這個系統是由全世界各地的成千上萬的程序員設計和實現的。其目的是建立不受任何商品化軟體的版權制約的、全世界都能自由使用的Unix兼容產品。
⑸ 在Linux系統中,常使用什麼命令檢索關鍵字
方法一:find命令
find是最常見和最強大的查找命令,你可以用它找到任何你想找的文件。
命令格式:find <指定目錄> <指定條件> <指定動作>
- <指定目錄>: 所要搜索的目錄及其所有子目錄。默認為當前目錄。
- <指定條件>: 所要搜索的文件的特徵。
- <指定動作>: 對搜索結果進行特定的處理。
如果什麼參數也不加,find默認搜索當前目錄及其子目錄,並且不過濾任何結果(也就是返回所有文件),將它們全都顯示在屏幕上。
使用實例:
$ find . -name 'my*'
搜索當前目錄(含子目錄,以下同)中,所有文件名以my開頭的文件。
$ find . -name 'my*' -ls
搜索當前目錄中,所有文件名以my開頭的文件,並顯示它們的詳細信息。
$ find . -type f -mmin -10
搜索當前目錄中,所有過去10分鍾中更新過的普通文件。如果不加-type f參數,則搜索普通文件+特殊文件+目錄。
方法二:locate命令
locate命令其實是"find -name"的另一種寫法,但是要比後者快得多,原因在於它不搜索具體目錄,而是搜索一個資料庫(/var/lib/locatedb),這個資料庫中含有本地所有文件信息。Linux系統自動創建這個資料庫,並且每天自動更新一次,所以使用locate命令查不到最新變動過的文件。為了避免這種情況,可以在使用locate之前,先使用updatedb命令,手動更新資料庫。
使用實例:
$ locate /etc/sh
搜索etc目錄下所有以sh開頭的文件。
$ locate ~/m
搜索用戶主目錄下,所有以m開頭的文件。
$ locate -i ~/m
搜索用戶主目錄下,所有以m開頭的文件,並且忽略大小寫。
⑹ linux查找內容命令
find,用於在文件樹中查找文件並作相應的處理
-name:按照文件名查找文件
-perm:按照文件許可權查找文件
-user:按照文件屬主來查找文件
-size:按照指定的文件大小查找文件【+n:大於,-n:小於,n:等於】
-group:按照文件所屬的組來查找文件
-mtime<-n><+n>:按照文件更改時間來查找文件,-n表示n天之內,+n表示n天以前
-newer file1 file2:查找更改時間在file1和file2之間的文件
例如:
find -mtime -2:查找48小時修改過的文件
find -name ".log":查找當前目錄以".log"結尾的文件
find /opt/soft/test -perm 777:查找指定目錄下許可權為777的文件
find -type f -name "*.log":查找當前目錄下以".log"結尾的普通文件
find -type d | sort:查找當前所有目標目錄並排序
find /home/wansw -size +20M:查找大於20M的文件
locate指令,可以快速定位文件路徑,利用事先建立的系統中的所有文件名稱和路徑的locate資料庫,無需遍歷整個文件系統,查詢速度較快,為了保證查詢准確性,需要定期更新。《Linux就該這么學》
updatedb:第一次運行前,創建locate資料庫
grep,用於過濾/搜索指定字元串。可以使用正則表達式,能配合多種命令使用。
用法:grep 【選項】 查找內容 源文件
-A:顯示符合的行及之後的內容
-B:顯示符合的行及之前的內容
-C:顯示符合的行及前後的內容
-c:計算符合的行數目
-n:顯示匹配行和行號
-i:忽略大小寫
規則表達式
:'grep'表示匹配所有以grep開頭的行
'表示匹配所有以grep結尾的行
.:'gr.p'表示匹配'gr'後面接任意字元然後是'p'
:'grep'表示匹配一個或多個空格後緊跟grep的行
[]:[Gg]rep表示匹配Grep與grep
[]:[A-FH-Z]rep表示匹配不以A-F、H-Z開頭並緊跟rep的行
例如(grep命令大多數時候多要和別的命令一起使用才有意義):
ps -ef | grep -c SVN:查找指定的進程的個數
cat test.txt | grep -f test2.txt:從text2.txt中讀取關鍵字後在test.txt中搜索
cat test.txt | grep nf text2.txt:從text2.txt中讀取關鍵字後在text.txt中搜索並顯示行號
grep 'linux' text.txt test2.txt:從多個文件中搜索關鍵字'linux'
cat test.txt | grep -E 'ed|at':顯示包含ed或at的行
⑺ 如何通過linux命令根據某一列值唯一來過濾數據
你可以這樣做:
(1)為Server的那些使用者建立單獨的賬戶,例如:user01、user02....等等(可以給每個人建立一個單獨的賬戶。當然,為了使系統中的賬戶不至於太多而導致難以管理,也可以按照他們所在的部門、項目組(或工作組)、或是其它分類方式去建立賬戶)。
(2)對每個賬戶下的$HOME/.profile文件或者是$HOME/.cshrc文件(視不同用戶的SHELL來決定,例如:bsh和sh就是.profile,csh就是.cshrc),用
chown
root:root
...
(例如:
chown
root:root
.cshrc)
命令將它們改成root用戶及屬組所有,只有root用戶才可以更改它們。
(3)在每個用戶的$HOME/.profile或是$HOME/.cshrc等shell環境配置文件中,將你認為是危險的命令做以下的轉換:
alias
命令名='echo
管理員不運行執行該命令'
例如:
alias
format='echo
管理員不運行執行該命令'
這樣這些用戶就無法執行你限定的命令,執行之後都顯示「管理員不運行執行該命令」。
如果覺得改.profile或是.cshrc文件不保險,還可以在每個用戶的$HOME下建立.login文件,也用上述的方法將它改成root用戶屬組的,在裡面加入
alias
命令名='echo
管理員不運行執行該命令'
效果更好。
----看到了你的問題追加。我覺得要是大家都只能使用root賬戶,那麼這個系統的規劃是否合理?假如一定都要使用root賬戶的話,對於每個用戶在鍵入命令的過程中,你很難去捕獲他們都正在敲入什麼命令。只有等他們在命令行上都輸入完了,回車確認之後才可能去發現他們執行的進程。假如真有這樣的一個監控程序在你的系統中,就算是監控到了,那麼那些進程已經開始運行了,對很多人來說已經是無法收拾了,只有及時的殺掉那些進程了。建議你把敏感的命令給rename了算了,例如mv
format
frmt
----呵呵,你也夠執著的。既然一定要寫個程序,那我就說說大概的思路吧!具體的程序代碼你可以自己去寫,這樣也有些成就感。:)
不過我能保證,就算採用這樣的做法也不會取得什麼好的效果,尤其是大家都使用root賬戶。我用unix類操作系統近十年,聽我一句勸告不會有什麼害處啊!
程序思路:
(1)定義你的敏感命令列表(可以賦值給一個字元串數組)。
(2)獲取你本人在系統中當前的tty編號,以及你自己的IP地址(你是從哪個IP地址發起的telnet?如果你本人使用Console,也需要如此)。
(3)按照你的敏感命令列表,循環檢測除了自己的tty及IP地址之外的,其它tty及IP地址發起的敏感命令進程,如果發現,立即予以kill
-9。並向相應的tty發送警告信息。
注意:這個循環是無限循環;這個程序是一個守護進程(Daemon)。除非接到進程中止信號,否則它將一直運行。這樣做的缺點是,循環檢測並殺掉那些敏感進程的過程並不能確保實時性,在發現相應的進程時,那些進程可能已經運行了一小段時間,盡管這段時間非常非常的短,但是也可能已經產生了效力甚至是危害。不過,這也是沒辦法的事情了。誰要你非要這樣呢?
⑻ linux下在a.log文件中過濾包含關鍵詞error或者fatal的日誌,應該使用什麼語句
默認語句
多個文件可以使用grep命令,比如grepERROR/var/log/messages*。會把匹配到ERROR這個關鍵字的行和所在的日誌文件直接輸出到屏幕。
⑼ linux grep查詢結果再過濾
grep查詢過濾需要使用管道命令|。
舉例說明:
1、在進程表中查找特定進程的命令通常如下:
⑽ Linux下常用文本處理命令
Linux下常用文本處理命令大全
Linux下面有很多經典的非常有用的命令,其中處理文本的命令就有很多。下面就讓我們一起看看這些經典的Linux文本處理命令有哪些吧。
一. sort
文件排序, 通常用在管道中當過濾器來使用. 這個命令可以依據指定的關鍵字或指定的字元位置, 對文件行進行排序. 使用-m選項, 它將會合並預排序的輸入文件. 想了解這個命令的全部參數請參考這個命令的info頁.
二. tsort
拓撲排序, 讀取以空格分隔的有序對, 並且依靠輸入模式進行排序.
三. uniq
這個過濾器將會刪除一個已排序文件中的重復行. 這個命令經常出現在sort命令的管道後邊.
四. expand, unexpand
expand命令將會把每個tab轉化為一個空格. 這個命令經常用在管道中.
unexpand命令將會把每個空格轉化為一個tab. 效果與expand命令相反.
五. cut
一個從文件中提取特定域的工具. 這個命令與awk中使用的print $N命令很相似, 但是更受限. 在腳本中使用cut命令會比使用awk命令來得容易一些. 最重要的選項就是-d(欄位定界符)和-f(域分隔符)選項.
六. paste
將多個文件, 以每個文件一列的形式合並到一個文件中, 合並後文件中的每一列就是原來的一個文件. 與cut結合使用, 經常用於創建系統log文件.
七. join
這個命令與paste命令屬於同類命令. 但是它能夠完成某些特殊的目地. 這個強力工具能夠以一種特殊的形式來合並兩個文件, 這種特殊的形式本質上就是一個關聯資料庫的簡單版本.
join命令只能夠操作兩個文件. 它可以將那些具有特定標記域(通常是一個數字標簽)的行合並起來, 並且將結果輸出到stdout. 被加入的文件應該事先根據標記域進行排序以便於能夠正確的匹配.
八. head
把文件的頭部內容列印到stdout上(默認為10行, 可以自己修改). 這個命令有一些比較有趣的選項.
九. tail
將一個文件結尾部分的內容輸出到stdout中(默認為10行). 通常用來跟蹤一個系統logfile的.修改情況, 如果使用-f選項的話, 這個命令將會繼續顯示添加到文件中的行.
十. wc
wc可以統計文件或I/O流中的”單詞數量”:
十一. fold
將輸入按照指定寬度進行折行. 這里有一個非常有用的選項-s, 這個選項可以使用空格進行斷行(譯者: 事實上只有外文才需要使用空格斷行, 中文是不需要的)(請參考例子 12-23和例子 A-1).
十二. fmt
一個簡單的文件格式器, 通常用在管道中, 將一個比較長的文本行輸出進行”折行”.
十三. col
這個命令用來濾除標准輸入的反向換行符號. 這個工具還可以將空白用等價的tab來替換. col工具最主要的應用還是從特定的文本處理工具中過濾輸出, 比如groff和tbl. (譯者: 主要用來將man頁轉化為文本.)
十四. column
列格式化工具. 通過在合適的位置插入tab, 這個過濾工具會將列類型的文本轉化為”易於列印”的表格式進行輸出.
十五. colrm
列刪除過濾器. 這個工具將會從文件中刪除指定的列(列中的字元串)並且寫到文件中, 如果指定的列不存在, 那麼就回到stdout. colrm 2 4 <filename將會刪除filename文件中每行的第2到第4列之間的所有字元. p=""> </filename將會刪除filename文件中每行的第2到第4列之間的所有字元.>
Caution: 如果這個文件包含tab和不可列印字元, 那將會引起不可預期的行為. 在這種情況下, 應該通過管道的手段使用expand和unexpand來預處理colrm.
十六. nl
計算行號過濾器. nl filename將會把filename文件的所有內容都輸出到stdout上, 但是會在每個非空行的前面加上連續的行號. 如果沒有filename參數, 那麼就操作stdin.
nl命令的輸出與cat -n非常相似, 然而, 默認情況下nl不會列出空行.
十七. pr
格式化列印過濾器. 這個命令會將文件(或stdout)分頁, 將它們分成合適的小塊以便於硬拷貝列印或者在屏幕上瀏覽. 使用這個命令的不同的參數可以完成好多任務, 比如對行和列的操作, 加入行, 設置頁邊, 計算行號, 添加頁眉, 合並文件等等. pr命令集合了許多命令的功能, 比如nl, paste, fold, column, 和expand.
pr -o 5 –width=65 fileZZZ | more 這個命令對fileZZZ進行了比較好的分頁, 並且列印到屏幕上. 文件的縮進被設置為5, 總寬度設置為65.
一個非常有用的選項-d, 強制隔行列印(與sed -G效果相同).
十八. gettext
GNU gettext包是專門用來將程序的輸出翻譯或者本地化為不同國家語言的工具集. 在最開始的時候僅僅支持C語言, 現在已經支持了相當數量的其它程序語言和腳本語言.
想要查看gettext程序如何在shell腳本中使用. 請參考info頁.
十九. msgfmt
一個產生二進制消息目錄的程序. 這個命令主要用來本地化.
二十. iconv
一個可以將文件轉化為不同編碼格式(字元集)的工具. 這個命令主要用來本地化.
二十一. recode
可以認為這個命令是上邊iconv命令的專業版本. 這個非常靈活的並可以把整個文件都轉換為不同編碼格式的工具並不是Linux標准安裝的一部分.
二十二. TeX, gs
TeX和Postscript都是文本標記語言, 用來對列印和格式化的視頻顯示進行預拷貝.
TeX是Donald Knuth精心製作的排版系統. 通常情況下, 通過編寫腳本的手段來把所有的選項和參數封裝起來一起傳到標記語言中是一件很方便的事情.