① shell腳本讀文件如何忽略空行和注釋行
可以通過sed命令,將空行和注釋行刪除掉。
1、以下面的文檔內容為例,#號開頭的是注釋,然後有很多空行,文檔名為1.tt。
② linux命令grep怎麼取得空白行
那個復命令本身就有問題制出來的結果是0;
修改後的命令如下:
last| grep [a-zA-Z]|egrep -v 『wtmp』|wc -l
grep [a-zA-Z]排除空行,因為空行不包含字母
③ linux去掉文件中的空行
方法一:利用grep
grep -v '^s*$' test.txt
註:-v表示將匹配的結果進行反轉,正則表達式匹配空行。(空行可包括空格符製表符等空白字元)
方法二:利用sed
sed '/^s*$/d' test.txt
註:d代表刪除該行
方法三:利用awk
awk NF test.txt
註:NF代表當前行的欄位數,空行的話欄位數為0,被awk解釋為假,因此不進行輸出。
以上三種方式均可處理包含空白字元(空格符,製表符等)的空行。
方法四:若空行均由』 '造成,則還可以利用tr命令去除空行。《Linux就該這么學》
tr -s ' ' < test.txt
註:-s代表將多個連續的字元壓縮成一個字元,這里是將多個『 '壓縮成一個' ',達到去除空行的效果。
方法四的缺陷:如果首行就出現空行的話則無法去除首行的空行
④ linux 如何將一行注釋掉
1、使用grep -v "^#" 來去掉注釋行
其中:-v 就是取相反的 ^# 表示以#開頭的行eg. grep -v "^#" /etc/vsftpd/vsftpd.conf (也可以使用「>」來重寫配置文件)
2、有時也會連同空行一起去掉,使用管道符來完成(^$表示空行 )
eg. grep -v "^#" httpd.conf | grep -v "^$" >> vsftpd.conf
上面用了2次 grep 過濾命令 ,也就是把空行和註解行過濾掉,再把剩下的內容追加保存為原來的配置文件 vsftpd.conf 這個時候就文件里的內容就沒有註解行和空行了。
注意事項
1、^一行的開始 ^d以開頭的 ^..1 第三個為1的字元 ^字元要放在匹配的字元前面
2、$一行的末尾 ^$ 表示空行 ^.$匹配一行一個字元的 $字元要放在匹配的字元後面
3、*匹配任意個字元 包括0個字元 .表示單個字元
4、可以屏蔽一個特殊的字元 *.pas 這里的*是特殊字元,這樣就表示*.pas這個文件
5、逗號可以分割不同的匹配字元如[S,s]表示S或者s都可以
6、-表示一個范圍,[1-9],[a-z],[A-Z] [1-9 A-Z a-z]任意的字元或者數字
A{2}B 表示A出現了2次 AAB
A{4,}B 表示A至少出現4次 AAAAB,AAAAAB
A{2,4}B 表示A出現2-4次 AAB AAAB AAAAB
[0-9]{3}.[0-9]{3}.[0-9]{3}.[0-9]{3} 0-999.0-999.0-999.0-999
cat server.conf |grep -v "^[#,;]" |grep -v "^$"
⑤ 如何去掉linux配置文件的注釋行
1、使用grep -v "^#" 來去掉注釋行,其中:-v 就是取相反的 ^# 表示註解行 eg. grep -v "^#" /etc/vsftpd/vsftpd.conf (也可以使用「>」來重寫配置文件) 2、有時也會連同空行一起去掉,使用管道符來完成(^$表示空行 ) eg. grep -v "^#" httpd.conf | grep -v "^$" >> vsftpd.conf 上面用了 2次 grep 過濾命令 ,也就是把空行和註解行過濾掉,再把剩下的內容追加保存為原 來的配置文件 vsftpd.conf 這個時候就文件里的內容就沒有註解行和空行了,,,, 提示: 對配置文件不熟悉的建議不要用這種方法,配置文件中的註解行還是有一定的幫助的。
⑥ Linux文本匹配命令grep與fgrep使用全解
Linux中grep與fgrep命令的使用,兩個命令的使用都與文本的搜索與匹配相關,是Linux入門學習中的基礎知識,接下來是我為大家收集的Linux文本匹配命令grep與fgrep使用全解,希望能幫到大家。
Linux文本匹配命令grep與fgrep使用全解
grep
grep (global search regular expression(RE) and print out the line,全面搜索正則表達式並把行列印出來)是一種強大的文本搜索工具,它能使用正則表達式搜索文本,並把匹配的行列印出來。Unix的grep家族包括grep、egrep和fgrep。egrep和fgrep的命令只跟grep有很小不同。egrep是grep的擴展,支持更多的re元字元, fgrep就是fixed grep或fast grep,它們把所有的字母都看作單詞,也就是說,正則表達式中的元字元表示回其自身的字面意義,不再特殊。Linux使用GNU版本的grep。它功能更強,可以通過-G、-E、-F命令行選項來使用egrep和fgrep的功能。
grep的工作方式是這樣的,它在一個或多個文件中搜索字元串模板。如果模板包括空格,則必須被引用,模板後的所有字元串被看作文件名。搜索的結果被送到屏幕,不影響原文件內容。
grep可用於shell腳本,因為grep通過返回一個狀態值來說明搜索的狀態,如果模板搜索成功,則返回0,如果搜索不成功,則返回1,如果搜索的文件不存在,則返回2。我們利用這些返回值就可進行一些自動化的文本處理工作。
grep --help
匹配模式選擇:
-E, --extended-regexp 擴展正則表達式egrep
-F, --fixed-strings 一個換行符分隔的字元串的集合fgrep
-G, --basic-regexp 基本正則
-P, --perl-regexp 調用的perl正則
-e, --regexp=PATTERN 後面根正則模式,默認無
-f, --file=FILE 從文件中獲得匹配模式
-i, --ignore-case 不區分大小寫
-w, --word-regexp 匹配整個單詞
-x, --line-regexp 匹配整行
-z, --null-data 一個 0 位元組的數據行,但不是空行
雜項:
-s, --no-messages 不顯示錯誤信息
-v, --invert-match 顯示不匹配的行
-V, --version 顯示版本號
--help 顯示幫助信息
--mmap use memory-mapped input if possible
輸入控制:
-m, --max-count=NUM 匹配的最大數
-b, --byte-offset 列印匹配行前面列印該行所在的塊號碼。
-n, --line-number 顯示的加上匹配所在的行號
--line-buffered 刷新輸出每一行
-H, --with-filename 當搜索多個文件時,顯示匹配文件名前綴
-h, --no-filename 當搜索多個文件時,不顯示匹配文件名前綴
--label=LABEL print LABEL as filename for standard input
-o, --only-matching 只顯示一行中匹配PATTERN 的部分
-q, --quiet, --silent 不顯示任何東西
--binary-files=TYPE 假定二進制文件的TYPE 類型;
TYPE 可以是`binary', `text', 或`without-match'
-a, --text 匹配二進制的東西
-I 不匹配二進制的東西
-d, --directories=ACTION 目錄操作,讀取,遞歸,跳過
-D, --devices=ACTION 設置對設備,FIFO,管道的操作,讀取,跳過
-R, -r, --recursive 遞歸調用
--include=PATTERN 只查找匹配FILE_PATTERN 的文件
--exclude=PATTERN 跳過匹配FILE_PATTERN 的文件和目錄
--exclude-from=FILE 跳過所有除FILE 以外的文件
-L, --files-without-match 匹配多個文件時,顯示不匹配的文件名
-l, --files-with-matches 匹配多個文件時,顯示匹配的文件名
-c, --count 顯示匹配了多少次
-Z, --null 在FILE 文件最後列印空字元
文件控制:
-B, --before-context=NUM 列印匹配本身以及前面的幾個行由NUM控制
-A, --after-context=NUM 列印匹配本身以及隨後的幾個行由NUM控制
-C, --context=NUM 列印匹配本身以及隨後,前面的幾個行由NUM控制
-NUM 根-C的用法一樣的
--color[=WHEN],
--colour[=WHEN] 使用標志高亮匹配字串;
-U, --binary 使用標志高亮匹配字串;
-u, --unix-byte-offsets 當CR 字元不存在,報告位元組偏移(MSDOS 模式)
例:
測試文件
復制代碼
代碼如下:
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/bin/false,aaa,bbbb,cccc,aaaaaa
DADddd:x:2:2:daemon:/sbin:/bin/false
mail:x:8:12:mail:/var/spool/mail:/bin/false
ftp:x:14:11:ftp:/home/ftp:/bin/false
&nobody:$:99:99:nobody:/:/bin/false
zhangy:x:1000:100:,,,:/home/zhangy:/bin/bash
http:x:33:33::/srv/http:/bin/false
dbus:x:81:81:System message bus:/:/bin/false
hal:x:82:82:HAL daemon:/:/bin/false
mysql:x:89:89::/var/lib/mysql:/bin/false
aaa:x:1001:1001::/home/aaa:/bin/bash
ba:x:1002:1002::/home/zhangy:/bin/bash
test:x:1003:1003::/home/test:/bin/bash
@zhangying:*:1004:1004::/home/test:/bin/bash
policykit:x:102:1005:Po
a,匹配含有root的行
復制代碼
代碼如下:
[root@krlcgcms01 test]# grep root test
root:x:0:0:root:/root:/bin/bash
b,匹配以root開頭或者以zhang開頭的行,注意反斜杠
復制代碼
代碼如下:
[root@krlcgcms01 test]# cat test |grep '^\(root\|zhang\)'
root:x:0:0:root:/root:/bin/bash
zhangy:x:1000:100:,,,:/home/zhangy:/bin/bash
c,匹配以root開頭或者以zhang開頭的行,注意反斜杠,根上面一個例子一樣,-e默認是省去的
[root@krlcgcms01 test]# cat test |grep -e '^\(root\|zhang\)'
root:x:0:0:root:/root:/bin/bash
zhangy:x:1000:100:,,,:/home/zhangy:/bin/bash
d,匹配以zhang開頭,只含有字母
復制代碼
代碼如下:
[root@krlcgcms01 test]# echo 'zhangying' |grep '^zhang[a-z]*$'
zhangying
e,匹配以bin開頭的行,用的egrep,在這里可以換成-F,-G
復制代碼
代碼如下:
[root@krlcgcms01 test]# cat test |grep -E '^bin'
bin:x:1:1:bin:/bin:/bin/false,aaa,bbbb,cccc,aaaaaa
f,在匹配的行前面加上該行在文件中,或者輸出中所在的行號
復制代碼
代碼如下:
[root@krlcgcms01 test]# cat test|grep -n zhangy
7:zhangy:x:1000:100:,,,:/home/zhangy:/bin/bash
13:ba:x:1002:1002::/home/zhangy:/bin/bash
15:@zhangying:*:1004:1004::/home/test:/bin/bash
g,不匹配以bin開頭的行,並顯示行號
復制代碼
代碼如下:
[root@krlcgcms01 test]# cat test|grep -nv '^bin'
root:x:0:0:root:/root:/bin/bash
DADddd:x:2:2:daemon:/sbin:/bin/false
mail:x:8:12:mail:/var/spool/mail:/bin/false
ftp:x:14:11:ftp:/home/ftp:/bin/false
&nobody:$:99:99:nobody:/:/bin/false
zhangy:x:1000:100:,,,:/home/zhangy:/bin/bash
http:x:33:33::/srv/http:/bin/false
dbus:x:81:81:System message bus:/:/bin/false
hal:x:82:82:HAL daemon:/:/bin/false
mysql:x:89:89::/var/lib/mysql:/bin/false
aaa:x:1001:1001::/home/aaa:/bin/bash
ba:x:1002:1002::/home/zhangy:/bin/bash
test:x:1003:1003::/home/test:/bin/bash
@zhangying:*:1004:1004::/home/test:/bin/bash
policykit:x:102:1005:Po
h,顯示匹配的個數,不顯示內容
復制代碼
代碼如下:
[root@krlcgcms01 test]# cat test|grep -c zhang
3
i,匹配system,沒有加-i沒有匹配到東西。
復制代碼
代碼如下:
[root@krlcgcms01 test]# grep system test
[root@krlcgcms01 test]# grep -ni system test
9:dbus:x:81:81:System message bus:/:/bin/false
j,匹配zhan沒有匹配到東西,匹配zhangy能匹配到,因為在test文件中,有zhangy這個單詞
復制代碼
代碼如下:
[root@krlcgcms01 test]# cat test|grep -w zhan
[root@krlcgcms01 test]# cat test|grep -w zhangy
zhangy:x:1000:100:,,,:/home/zhangy:/bin/bash
ba:x:1002:1002::/home/zhangy:/bin/bash
k,在這里-x後面東西,和輸出中的整行相同時,才會輸出
[root@krlcgcms01 test]# echo "aaaaaa" |grep -x aaa
[root@krlcgcms01 test]# echo "aaaa" |grep -x aaaa
aaaa
l,最多隻匹配一次,如果把-m 1去掉的話,會有三個
復制代碼
代碼如下:
[root@krlcgcms01 test]# cat test |grep -m 1 zhang
zhangy:x:1000:100:,,,:/home/zhangy:/bin/bash
m,匹配行的前面顯示塊號,這個塊號是干什麼的,不知道,有誰知道可否告訴我一下
復制代碼
代碼如下:
[apacheuser@krlcgcms01 test]$ cat test |grep -b zha
241:zhangy:x:1000:100:,,,:/home/zhangy:/bin/bash
480:ba:x:1002:1002::/home/zhangy:/bin/bash
558:@zhangying:*:1004:1004::/home/test:/bin/bash
n,多文件匹配時,在匹配的行前面加上文件名
復制代碼
代碼如下:
[apacheuser@krlcgcms01 test]$ grep -H 'root' test test2 testbak
test:root:x:0:0:root:/root:/bin/bash
test2:root
testbak:root:x:0:0:root:/root:/bin/bash
o,多文件匹配時,在匹配的行前面不加上文件名
復制代碼
代碼如下:
[apacheuser@krlcgcms01 test]$ grep -h 'root' test test2 testbak
root:x:0:0:root:/root:/bin/bash
root
root:x:0:0:root:/root:/bin/bash
p,多文件匹配時,顯示匹配文件的文件名
復制代碼
代碼如下:
[apacheuser@krlcgcms01 test]$ grep -l 'root' test test2 testbak DAta
test
test2
testbak
q,沒有-o時,有一行匹配,這一行裡面有3個root,加上-o後,這個3個root就出來了
復制代碼
代碼如下:
[apacheuser@krlcgcms01 test]$ grep 'root' test
root:x:0:0:root:/root:/bin/bash
[apacheuser@krlcgcms01 test]$ grep -o 'root' test
root
root
root
r,遞歸顯示匹配的內容,在test目錄下面建個mytest目錄, test目錄下面的test文件到mytest下面,能看到上面的結果
復制代碼
代碼如下:
[root@krlcgcms01 test]# grep test -R /tmp/test/mytest
/tmp/test/mytest/test:test:x:1003:1003::/home/test:/bin/bash
/tmp/test/mytest/test:@zhangying:*:1004:1004::/home/test:/bin/bash
s,顯示匹配root後面的3行
復制代碼
代碼如下:
[root@krlcgcms01 test]# cat test |grep -A 3 root
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/bin/false,aaa,bbbb,cccc,aaaaaa
daemon:x:2:2:daemon:/sbin:/bin/false
mail:x:8:12:mail:/var/spool/mail:/bin/false
fgrep
用法: fgrep [選項]... PATTERN [FILE]...
在每個 FILE 或是標准輸入中查找 PATTERN。
PATTERN 是一組由斷行符分隔的定長字元串。
例如: fgrep -i 'hello world' menu.h main.c
正則表達式選擇與解釋:
-e, --regexp=PATTERN 用 PATTERN 來進行匹配操作
-f, --file=FILE 從 FILE 中取得 PATTERN
-i, --ignore-case 忽略大小寫
-w, --word-regexp 強制 PATTERN 僅完全匹配字詞
-x, --line-regexp 強制 PATTERN 僅完全匹配一行
-z, --null-data 一個 0 位元組的數據行,但不是空行
雜項:
-s, --no-messages 不顯示錯誤信息
-v, --invert-match 選中不匹配的行
-V, --version 顯示版本信息並退出
--help 顯示此幫助並退出
--mmap 忽略向後兼容性
Output control:
-m, --max-count=NUM 匹配的最大數
-b, --byte-offset 列印匹配行前面列印該行所在的塊號碼
-n, --line-number 顯示的加上匹配所在的行號
--line-buffered 刷新輸出每一行
-H, --with-filename 當搜索多個文件時,顯示匹配文件名前綴
-h, --no-filename 當搜索多個文件時,不顯示匹配文件名前綴
--label=LABEL use LABEL as the standard input file name prefix
-o, --only-matching 只顯示一行中匹配PATTERN 的部分
-q, --quiet, --silent 不顯示所有輸出
--binary-files=TYPE 假定二進制文件的TYPE 類型;
TYPE 可以是`binary', `text', 或`without-match'
-a, --text 等同於 --binary-files=text
-I 等同於 --binary-files=without-match
-d, --directories=ACTION 操作目錄的方式;
ACTION 可以是`read', `recurse',或`skip'
-D, --devices=ACTION 操作設備、先入先出隊列、套接字的方式;
ACTION 可以是`read'或`skip'
-R, -r, --recursive 等同於 --directories=recurse
--include=FILE_PATTERN 只查找匹配FILE_PATTERN 的文件
--exclude=FILE_PATTERN 跳過匹配FILE_PATTERN 的文件和目錄
--exclude-from=FILE 跳過所有除FILE 以外的文件
--exclude-dir=PATTERN 跳過所有匹配PATTERN 的目錄。
-L, --files-without-match 只列印不匹配FILEs 的文件名
-l, --files-with-matches 只列印匹配FILES 的文件名
-c, --count 只列印每個FILE 中的匹配行數目
-T, --initial-tab 行首tabs 分隔(如有必要)
-Z, --null 在FILE 文件最後列印空字元
文件控制:
-B, --before-context=NUM 列印以文本起始的NUM 行
-A, --after-context=NUM 列印以文本結尾的NUM 行
-C, --context=NUM 列印輸出文本NUM 行
-NUM 等同於 --context=NUM
--color[=WHEN],
--colour[=WHEN] 使用標志高亮匹配字串;
WHEN 可以是`always', `never'或`auto'
-U, --binary 不要清除行尾的CR 字元(MSDOS 模式)
-u, --unix-byte-offsets 當CR 字元不存在,報告位元組偏移(MSDOS 模式)
‘fgrep’已不再使用了;請用 ‘grep -F’代替。
不帶 FILE 參數,或是 FILE 為 -,將讀取標准輸入。如果少於兩個 FILE 參數
就要默認使用 -h 參數。如果選中任意一行,那退出狀態為 0,否則為 1;
如果有錯誤產生,且未指定 -q 參數,那退出狀態為 2。
例:
復制代碼
代碼如下:
[root@linux test]# cat abc.sh |fgrep a #匹配含有a的
看了“Linux文本匹配命令grep與fgrep使用全解”還想看:
1. linux grep命令詳解
2. 全面解析Linux的grep命令中正則表達式的用法
3. Linux下如何使用grep命令搜索多個單詞
4. 開發人員常用什麼linux命令
⑦ 如何去掉linux配置文件的注釋行和空行
1、使用grep -v "^#" 來去掉注釋行,其中:-v 就是取相反的 ^# 表示以#開頭的行
eg. grep -v "^#" /etc/vsftpd/vsftpd.conf (也可以使用「>」來重寫配置文件)
2、有時也會連同空行一起去掉,使用管道符來完成(^$表示空行 )
eg. grep -v "^#" httpd.conf | grep -v "^$" >> vsftpd.conf
上面用了 2次 grep 過濾命令 ,也就是把空行和註解行過濾掉,再把剩下的內容追加保存為原
來的配置文件 vsftpd.conf 這個時候就文件里的內容就沒有註解行和空行了,,,,
3、備註:在更改配置文件時,建議先對配置文件做一下備份,對配置文件不熟悉的建議不要用這種方法,配置文件中的註解行還是有一定的幫助的。
cp -a httpd.conf httpd.conf.bak
⑧ 怎樣用grep命令去掉空格行和以#開頭的行
grep -Ev '^[ ]*$|^#' 文件名
-E是擴展的grep,即egrep
-v是反選,除了匹配正則的行都列印出來
正則:
^ 開頭標記
[ ]* 一個或多個空格
$ 行尾
| 或者
^# 以#開頭的行
⑨ Linux grep、egrep使用命令詳解
grep egrep區別
grep 默認不支持擴展 但可以通過-E 選擇來支持擴展正則
egrep 支持擴展正則
關於正則與擴展正則的區別可以看我另一篇shell 正則的介紹
文件處理順序 以行為單位,逐行進行處理
默認只輸出與表達式相匹配的文本行
基本用法
- 格式1:egrep [選擇] '正則表達式' 文件
- 格式2:前置命令 | egrep [選擇] '正則表達式'
• egrep命令工具 (擴展正則命令)
• 常用命令選項
•grep 正則表達式,用來查找過濾文檔的工具符號
grep "root" user //在user文檔中查找有單詞root的行
grep "^root" user //在user文檔中查找以單詞root開頭的行
grep "bash " user //查找空行
grep "^ " user //查找以空格開頭的行
grep "[rot]" user //查找字母r或者o或者t
grep "roo[tn]" user //查找root或者roon
grep "[^rot]" user //查找字母r或者o或者t之外的內容
grep "[a-z]" user //查找小寫字母
grep "[A-Z]" user //查找大寫字母
grep "[a-Z]" user //查找所有字母
grep "[0-9]" user //查找數字
grep "r..t" user //查找以r開頭t結尾中間有2個任意字元的單詞
grep "r. " user //查找以r開頭後面任意字元 相當手通配符
grep "ro*" user //查找以r開頭後面有或沒有字母o的單詞,o可以出現任意次
grep "o{1,2}" user //查找o出現1次到2次的行
grep "o{2,3}" user //查找o出現2次到3次的行
grep "o{2}" user //查找o出現2次的行
grep "o{1,} " user //查找o出現1次以及1次以上
grep "(:0){2}" user //查找:0(數字零)連續出現2次的行
擴展正則
egrep "o+" user //查找o出現1次以及1次以上
egrep "o?" user //查找o出現0次或1次
egrep "o{1,2}" user //查找o出現1次到2次的行
egrep "o{2,3}" user //查找o出現2次到3次的行
egrep "o{2}" user //查找o出現2次的行
egrep "o{1,}" user //查找o出現1次以及1次以上
egrep "(:0){2}" user //查找:0(數字零)連續出現2次的行
egrep "bash|nologin" user //查找bash或者nologin
egrep "the" a //查找單詞the,前後是空格或者特殊符號
案例:
正則表達式匹配練習
1)典型的應用場合:grep、egrep檢索文本行
grep命令不帶-E選項時,支持基本正則匹配模式。比如「word」關鍵詞檢索、「^word」匹配以word開頭的行、「word$」匹配以word結尾的行……等等。
輸出以「r」開頭的用戶記錄:
輸出以「localhost」結尾的行:
若希望在grep檢索式同時組合多個條件,比如輸出以「root」或者以「daemon」開頭的行:
而若若使用grep -E或egrep命令,可支持擴展正則匹配模式,能夠自動識別 |、{} 等擴展正則表達式中的特殊字元,用起來更加方便,比如:
或者
使用grep -E 與 使用egrep命令完全等效,推薦使用後者,特別是涉及到復雜的正則表達式的時候。
2)grep、egrep命令的-q選項
選項 -q 表示 quiet(靜默)的意思,結合此選項可以只做檢索而並不輸出,通常在腳本內用來識別查找的目標是否存在,通過返回狀態 $? 來判斷,這樣可以忽略無關的文本信息,簡化腳本輸出。
比如,檢查/etc/hosts文件內是否存在192.168.4.4的映射記錄,如果存在則顯示「YES」,否則輸出「NO」,一般會執行:
這樣grep的輸出信息和腳本判斷後的提示混雜在一起,用戶不易辨別,所以可以改成以下操作:
是不是清爽多了,從上述結果也可以看到,使用 -q 選項的效果與使用 &> /dev/null的效果類似。
3)基本元字元 ^、$ —— 匹配行首、行尾
輸出注釋的配置行(以#開頭的行):
統計本地用戶中登錄Shell為「/sbin/nologin」的用戶個數:
提示: -m10僅在文件的前10行中過濾,後面的行不再過濾。
結合 -c 選項輸出匹配的行數
使用 -c 選項可輸出匹配行數,這與通過管道再 wc -l的效果是相同的,但是寫法更簡便。比如,統計使用「/bin/bash」作為登錄Shell的正常用戶個數,可執行:
或者
4)基本元字元 . —— 匹配任意單個字元
以/etc/rc.local文件為例,確認文本內容:
輸出/etc/rc.local文件內的空行(用 –v 選項將條件取反):
5)基本元字元 +、?、 —— 目標出現的次數*
還以/etc/rc.local文件為例:
輸出包括 f、ff、ff、……的行,即「f」至少出現一次:
輸出包括init、initial的行,即末尾的「ial」最多出現一次(可能沒有):
輸出包括stu、stuf、stuff、stufff、……的行,即末尾的「f」可出現任意多次,也可以沒有。重復目標只有一個字元時,可以不使用括弧:
輸出所有行,單獨的「.*」可匹配任意行(包括空行):
輸出/etc/passwd文件內「r」開頭且以「nologin」結尾的用戶記錄,即中間可以是任意字元:
6)元字元 {} —— 限定出現的次數范圍
創建一個練慣用的測試文件:
輸出包括ababab的行,即「ab」連續出現3次:
輸出包括abab、ababab、abababab的行,即「ab」連續出現2~4次:
輸出包括ababab、abababab、……的行,即「ab」最少連續出現3次:
7)元字元 [] —— 匹配范圍內的單個字元
還以前面的測試文件bracet.txt為例:
輸出包括abc、abd的行,即前兩個字元為「ab」,第三個字元只要是c、d中的一個就符合條件:
輸出包括大寫字母的行,使用[A-Z]匹配連續范圍:
8)單詞邊界匹配
以文件/etc/rc.local為例:
輸出包括單詞「init」的行,文件中「initialization」不合要求:
或者:
輸出包括以「ll」結尾的單詞的行,使用 > 匹配單詞右邊界:
或者:
9)多個條件的組合
通過dmesg啟動日誌查看藍牙設備、網卡設備相關的信息:
⑩ 怎樣用grep命令去掉空格行和以#開頭的行
grep -vE '^#|^$' filename
「^」表示行首,「^」#就是以#開頭的行。
「$」表示行尾,「^$」就是空行。
-E表示「或」的關系。