linux通配符和三劍客-grep(一)

通配符

通配符 解釋 例子
匹配任意一個 單個字符 只顯示a b c文件的信息ls ?
* 0個或者任意多個字符 顯示以.log結(jié)尾的文件 ls *.log
. 通配符沒有. 只是單作為一個字符,跟正則是有所區(qū)別的
[] [abc]或者[a,b,c] []里面任意1個
^ [^abc] ^必須在[]里,表示取反
- [a-z] -必須在[]里面,表示范圍a-z當中任意一個
{} {a.txt,b.txt}或者{01..100..2} 表示花括號內(nèi)多個{1..100..2}表示1 3 5 ..100 2表示步長
'' 單引號 ` 在單引號中所有的特殊符號如$ ,``都沒有特殊含義
" " 雙引號 單引號不同,一般情況都是沒有特殊意義的,但是有幾個符號有意義。如調(diào)用變量值 $,引用命名 `` 轉(zhuǎn)義符 \
` ` 反引號 反引號括起來的,都是系統(tǒng)命令,在bash中會執(zhí)行它,和$()作用一樣,推薦使用$()
# 在shell腳本中,表示注釋 #/usr/sh #/usr/bin/python #usr/bin/env python3
$ 作用調(diào)用變量 比如$name
基礎(chǔ)正則 . * .* ^.* .*$ [] ^ 其他符號都是擴展正則,擴展正則grep需要跟 -E 或者-P
擴展正則 () | {n,m} + \1
| 管道符||xargs的區(qū)別 | 傳遞的是字符串. | xargs 傳遞的是把文本,字符串變成了文件名
&& 當前一個指令執(zhí)行成功時,執(zhí)行后一個指令 $$ 當使用head tail cat 的時候可以當做字符串拼接

例子

  • a* a開頭的所有字符串
  • *a 以a結(jié)尾的
  • ?5* 第1個任意字符,第2個以5開始的
  • *b? 以倒數(shù)第2個為b的字符串
  • ls /etc/[^a-n]*.conf 列出/etc/目錄中不是以字母a到n開頭的,并且以.conf結(jié)尾的文件
  • ls /etc/[a-n]*.conf 列出/etc/目錄中以字母a到n開頭的,并且以.conf結(jié)尾的文件
  • ls /bin/[ck]* 列出以 c或k開頭的文件名

{}生成序列

image.png

利用 {} 來備份

image.png

{a,b,c} 來查找

image.png

(esc下面)反引號 引用命令的結(jié)果,相當于$()

image.png

! 表示非

image.png

&&

image.png

單引號,雙引號,不加引號的區(qū)別

  • 單引號:所見即所得。

  • 雙引號:解析特殊符號,特殊符號有了原本的特殊意思

  • 不加引號:比較特殊,支持通配符

    image.png

三劍客之一 grep

name 功能 場景
grep 過濾 主要對文件進行搜索,或者進程查找.grep -v '^$' a.txt 取出a.txt沒有空行的所有內(nèi)容 ps -ef | grep crond|grep -v grep 查看有不有定時任務(wù)
seb 替換,修改文件內(nèi)容、取行 替換 修改 取范圍內(nèi)的內(nèi)容
awk 統(tǒng)計 計算 計算沖劑,對比 比如> < >= <= !=

grep 前置配置

1.給grep加上顏色

alias grep='grep --color=auto'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'

2. 取別名

alias grepp='grep -P --color=auto'
這樣下次直接使用grepp 就有 grep -P的效果

3. 正則匹配不到或者出問題了,修改字符集

  • locale命令查看LC-All的值設(shè)置成C
LANG=zh_CN.UTF-8
LC_CTYPE="zh_CN.UTF-8"
LC_NUMERIC="zh_CN.UTF-8"
LC_TIME="zh_CN.UTF-8"
LC_COLLATE="zh_CN.UTF-8"
LC_MONETARY="zh_CN.UTF-8"
LC_MESSAGES="zh_CN.UTF-8"
LC_PAPER="zh_CN.UTF-8"
LC_NAME="zh_CN.UTF-8"
LC_ADDRESS="zh_CN.UTF-8"
LC_TELEPHONE="zh_CN.UTF-8"
LC_MEASUREMENT="zh_CN.UTF-8"
LC_IDENTIFICATION="zh_CN.UTF-8"
LC_ALL=

臨時設(shè)置
export LC_ALL=C
永久設(shè)置 LC_ALL=C


[root@hadoop100 ~]# echo "export LC_ALL=C" >> /etc/profile
[root@hadoop100 ~]# source /etc/profile
[root@hadoop100 ~]# echo $LC_ALL
C
[root@hadoop100 ~]# locale
LANG=zh_CN.UTF-8
LC_CTYPE="C"
LC_NUMERIC="C"
LC_TIME="C"
LC_COLLATE="C"
LC_MONETARY="C"
LC_MESSAGES="C"
LC_PAPER="C"
LC_NAME="C"
LC_ADDRESS="C"
LC_TELEPHONE="C"
LC_MEASUREMENT="C"
LC_IDENTIFICATION="C"
LC_ALL=C
[root@hadoop100 ~]# echo $LC_ALL
C
[root@hadoop100 ~]# tail -1 /etc/profile
export LC_ALL=C
  • export LC_ALL=C 這樣設(shè)置下次linux重啟就會失效
    image.png

    下面圖 第一個紅線處 應(yīng)該是 echo "export LC_ALL=C >> /etc/profile"
    image.png

    虛擬機重啟之后,部分變化,點擊update Names
    image.png

設(shè)置環(huán)境變量

設(shè)置 Linux 系統(tǒng)的環(huán)境變量只需要在 /etc/profile (全局) 或者 ~/.bashrc (單個用戶,該文件也可以給用戶加入特殊變量) 即可。

字符集的設(shè)置:

1、臨時 LANG="zh_CN.UTF-8" export LANG= "zh_CN.UTF-8"。臨時有效下次登錄失效
2、修改bash的配置文件。如修改/etc/profile添加 export LANG=zh_CN.UTF-8

待續(xù).........................

man grep的時候有一個-P,文檔上的英文:

-P, --perl-regexp
Interpret PATTERN as a Perl regular expression. This is highly experimental and grep -P may warn of nimplemented features.

這意思是,-P 可以讓grep使用perl的正則表達式語法,因為perl的正則更加多元化,能實現(xiàn)更加復(fù)雜的場景。

最典型的用法是,匹配指定字符串之間的字符。 比如,我們想在一句話(Hello,my name is aming.)中匹配中間的一段字符串(my name is) 可以這樣寫正則表達式。

echo "Hello, my name is aming."|grep -P '(?<=Hello, ).*(?= aming.)'

如果只需要匹配到的部分,還可以加上-o選項

echo "Hello, my name is aming."|grep -Po '(?<=Hello, ).*(?= aming.)'

根據(jù)這個思路,我們可以去匹配IP地址

ifconfig eth0 |grep -Po '(?<=addr:).*(?= Bcast)'

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容