① 在linux系統如何grep過濾中,不包含某些字元
1、linux系統中grep命令是一種強大的文本搜索工具,它能使用正則表達式搜索文本,並把匹配的行列印出來。grep全稱是Global Regular Expression Print,表示全局正則表達式版本,它的使用許可權是所有用戶。
2、格式
grep[options]
3、主要參數
[options]主要參數:
-c:只輸出匹配行的計數。
-I:不區分大小寫(只適用於單字元)。
-h:查詢多文件時不顯示文件名。
-l:查詢多文件時只輸出包含匹配字元的文件名。
-n:顯示匹配行及行號。
-s:不顯示不存在或無匹配文本的錯誤信息。
-v:顯示不包含匹配文本的所有行。
pattern正則表達式主要參數:
\:忽略正則表達式中特殊字元的原有含義。
^:匹配正則表達式的開始行。
$: 匹配正則表達式的結束行。
\<:從匹配正則表達式的行開始。
\>:到匹配正則表達式的行結束。
[ ]:單個字元,如[A]即A符合要求。
[ - ]:范圍,如[A-Z],即A、B、C一直到Z都符合要求。
。:所有的單個字元。
* :有字元,長度可以為0。
4、grep命令使用簡單實例:
$ grep 『test』d*
顯示所有以d開頭的文件中包含test的行。
$ grep 『test』aa bb cc
顯示在aa,bb,cc文件中匹配test的行。
$ grep『[a-z]\{5\}』 aa
顯示所有包含每個字元串至少有5個連續小寫字元的字元串的行。
② Linux中,如何將grep 搜索到的結果導入到一個文件,但要剔除沒找到的項,只留找到的項。
grep 本來就是過濾命令。
你將其他命令得到的結果,比如ls -l命令得到的列表,通過管道符 | 導出到grep,後面接上要查找的關鍵字,再把結果通過重定向導出到文件。
就像:lsmod | grep wifi >> ~/result.txt
③ linux grep -d skip/skip/recurse 是讀目錄文件採取讀或者跳過,我感覺這個沒有用啊,用了和沒用一樣!
個人理解,舉例子,過濾關鍵字'DEVICE=ens33',過濾位置/etc/* ,就是在/etc/目錄下過濾出關鍵字'DEVICE=ens33'的行
#read讀取
[root@localhost~]#grep-dread'DEVICE-ens33'/etc/*
會發現得到很多:grep: /etc/xxx: Is a directory,我給的范圍是/etc/*,grep過濾字元時肯定要打開文件讀取到數據吧,而我給的路徑有的目錄,目錄怎麼讀取,所以讀目錄的時候會報錯,那麼我認為read是默認的模式,並且不會過濾子目錄內的文件!
#recurse遞歸
[root@localhost~]#grep-drecurse'DEVICE=ens33'/etc/*
得到結果:/etc/sysconfig/network-scripts/ifcfg-ens33:DEVICE=ens33發現,過濾的路徑不再是/etc/xxx,而是將/etc/所有的目錄包括子目錄都在過濾范圍內了,而沒有提示xxx Is a directory,可能是讀取子目錄時發現是目錄,就進到子目錄在進行過濾 [0_0]異想天開,反正,這不就是遞歸了嘛。
#skip跳過
[root@localhost~]#grep-dskip'DEVICE=ens33'/etc/*
#發現什麼都沒有,而我使用
[root@localhost~]#grep-dskip'/root:/bin/bash'/etc/*
#結果如下
/etc/passwd:root:x:0:0:root:/root:/bin/bash
/etc/passwd-:root:x:0:0:root:/root:/bin/bash
發現了當我使用skip這個選項,只有/etc/xxx這級目錄能被過濾出來,發現它並沒有遞歸了,並且沒有提示xxx Is a directory。從字面意思上看,skip,貌似是目錄的話就跳過了。。。
④ linux怎樣用grep過濾
不知道你是想實現什麼目的,如果你是想只顯示配置文件中的以 # 號開頭的行版,那就使用
# grep ^# filename
如果是想顯示除權 # 號開頭的行的話呢,只需加個參數-v (-v 表示相反的過濾)就行了
# grep -v ^# filename
⑤ LINUX過濾內容的問題
|1、復制文件到/tmp目錄
cp /etc/rsyslog.conf /tmp
2、去除#開頭和包含空格的行,重定向內到/root/grep.txt文件容
cat /tmp/rsyslog.conf | grep -v " "|sed 's/^#//g' > /root/grep.txt
⑥ 在linux操作系統中,如何單獨的用grep或者是其它命令獲取搜索關鍵詞所在行除去關鍵詞後的內容
sed後項引用
abc defg
sed 's@^\(ab\)c([[:space:]].*)@\1@'
ab defg
大概就是這個意思
⑦ linux 操作系統中shell過濾
這不簡單,循環嵌套case多分枝選擇結構,一樓的回答我就不說什麼了,根本就沒有/bash/這個路徑,sh自然也不會存在在這個路徑上。這個腳本就是可能的數值太多,case分支寫得累……。算了,我給你寫個吧。
說明:此腳本接收腳本後跟的第一個參數為讀取定義數值的文本,比如說你在工作路徑上有個叫test的文件,該文件定義了需要包含的數字,腳本本身的文件名是num那麼執行該腳本的命令是./num ./test
每個數字對應的命令自己改吧,我這里全是列印文件里包含了對應的數值到標准輸出上。以下腳本在ubuntu server 8.04測試通過。
#! /bin/bash
for var in `sed 's/,/ /g' $1` #注意,包圍sed語句的是反引號,即字母鍵盤上方數字1左邊的那個鍵
do
case $var in
0)
echo "0 is in the string\.";;
1)
echo "1 is in the string\.";;
2)
echo "2 is in the string\.";;
3)
echo "3 is in the string\.";;
4)
echo "4 is in the string\.";;
5)
echo "5 is in the string\.";;
6)
echo "6 is in the string\.";;
7)
echo "7 is in the string\.";;
8)
echo "8 is in the string\.";;
9)
echo "9 is in the string\.";;
10)
echo "10 is in the string\.";;
11)
echo "11 is in the string\.";;
12)
echo "12 is in the string\.";;
13)
echo "13 is in the string\.";;
14)
echo "14 is in the string\.";;
15)
echo "15 is in the string\.";;
16)
echo "16 is in the string\.";;
17)
echo "17 is in the string\.";;
18)
echo "18 is in the string\.";;
19)
echo "19 is in the string\.";;
20)
echo "20 is in the string\.";;
21)
echo "21 is in the string\.";;
22)
echo "22 is in the string\.";;
23)
echo "23 is in the string\.";;
24)
echo "24 is in the string\.";;
25)
echo "25 is in the string\.";;
26)
echo "26 is in the string\.";;
27)
echo "27 is in the string\.";;
28)
echo "28 is in the string\.";;
*)
echo "One or more variable\(s\) in $1 is out of range!";;
esac
done
⑧ 怎樣用grep命令去掉空格行和以#開頭的行
grep -vE '^#|^$' filename
「^」表示行首,「^」#就是以#開頭的行。
「$」表示行尾,「^$」就是空行。
-E表示「或」的關系。
⑨ linux中怎麼把grep過濾出的目錄傳給cd命令切換目錄
cd命令
使用許可權 : 所有使用者
使用方式 : cd [dirName]
說明 : 變換工作目錄至 dirName。 其中 dirName 表示法可為絕版對路徑或相對權路徑。若目錄名稱省略,則變換至使用者的 home directory (也就是剛 login 時所在的目錄)。
另外,"~" 也表示為 home directory 的意思,"." 則是表示目前所在的目錄,".." 則表示目前目錄位置的上一層目錄。
範例 : 跳到 /usr/bin/ :
cd /usr/bin
跳到自己的 home directory :
cd ~
跳到目前目錄的上上兩層 :
cd ../..
返回進入當前目錄前所在目錄
cd -
⑩ Linux:為什麼查找進程的時候要過濾掉grep呢
因為你查找進程用到了grep命令,而這個命令執行的時候帶有你查找的進程參數,同時專這也是一個進程。
例如 這條屬命令 ps -ef | grep http 其實是分兩步執行的 先執行ps -ef 再執行 grep http 這個命令本身執行的時候也是一個進程,並把也帶有http。
所以你要查找http進程,需要把 grep http這個進程過濾掉,才是最後的結果,怎麼過濾呢,肯定不能用http做關鍵字,只能用grep做關鍵字
也就是說查找http進程的話,這樣寫
ps -ef | grep http | grep -v grep