Linux之特殊符號與正則表達式

来源:https://www.cnblogs.com/yxiaodao/archive/2019/01/15/10270036.html
-Advertisement-
Play Games

Linux中常用的特殊符號 通配符 正則表達式 正則與統配符的區別 正則表達式的分類 基礎正則 擴展正則 + | () {} ? 正則總結 練習題 1、請執行命令取出linux中eth0的IP地址(請用cut,有能力者也可分別用awk,sed命令答) 2、如何取得/etc/hosts文件的許可權對應的 ...


Linux中常用的特殊符號

''     所見即所得,吃啥吐啥
""     特殊符號會被解析運行
``     ==== $() 先運行裡面的命令 把結果留下

>     重定向符號        先清空文件的內容 然後追加文件的最後
>>    追加重定向        追加文件的最後
2>    錯誤重定向        只有錯誤的信息 才會通過這個漏洞進入文件中
2>>   錯誤追加重定向

~     當前用戶的家目錄
root   ~ /root
oldboy ~ /home/oldboy
!     查找並運行歷史命令
!awk  包含awk的命令 最近的一條運行
      history |grep awk
#     註釋
      root用戶的命令提示符

$     取出變數的內容
      awk $取某一列的內容
      普通用戶的命令提示符
*     所有 任何東西
\     撬棍  轉義字元

&&    前一個命令執行成功然後在執行後一個命令
      ifdown eth0 && ifup eth0


||    前一個命令支持失敗了再執行後面的命令

通配符

通配符是用來查找文件的。如:‘*.txt’ 表示匹配所有以  . txt結尾的文件
##1. * 所有,任意 找出文件名包含oldboy的文件 mkdir -p /oldboy cd /oldboy touch oldboy.txt oldboy oldboyfile oldboy.awk eduoldboy [root@oldboyedu01-nb oldboy]# find /oldboy/ -type f -name "oldboy" /oldboy/oldboy [root@oldboyedu01-nb oldboy]# find /oldboy/ -type f -name "*oldboy" /oldboy/oldboy /oldboy/eduoldboy [root@oldboyedu01-nb oldboy]# find /oldboy/ -type f -name "*oldboy*" /oldboy/oldboyfile /oldboy/oldboy.txt-hard /oldboy/oldboy.awk /oldboy/oldboy.txt /oldboy/oldboy /oldboy/eduoldboy ##2. {} 生成序列 [root@oldboyedu01-nb oldboy]# echo {1..6} 1 2 3 4 5 6 [root@oldboyedu01-nb oldboy]# echo {1..10} 1 2 3 4 5 6 7 8 9 10 [root@oldboyedu01-nb oldboy]# echo {a..z} a b c d e f g h i j k l m n o p q r s t u v w x y z [root@oldboyedu01-nb oldboy]# echo {a..z} a b c d e f g h i j k l m n o p q r s t u v w x y z [root@oldboyedu01-nb oldboy]# echo {01..10} 01 02 03 04 05 06 07 08 09 10 [root@oldboyedu01-nb oldboy]# echo stu{01..10} stu01 stu02 stu03 stu04 stu05 stu06 stu07 stu08 stu09 stu10 [root@oldboyedu01-nb oldboy]# echo 20{01..10} 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 [root@oldboyedu01-nb oldboy]# [root@oldboyedu01-nb oldboy]# echo {1,9,20} 1 9 20 #通過{}進行備份 [root@oldboyedu01-nb oldboy]# echo A{B,C} AB AC [root@oldboyedu01-nb oldboy]# echo A{,C} A AC [root@oldboyedu01-nb oldboy]# echo oldboy.txt{,.bak} oldboy.txt oldboy.txt.bak [root@oldboyedu01-nb oldboy]# touch oldboy.txt [root@oldboyedu01-nb oldboy]# cp oldboy.txt{,.bak} [root@oldboyedu01-nb oldboy]# ls -l oldboy.txt* -rw-r--r--. 2 root root 29 Oct 18 07:42 oldboy.txt -rw-r--r-- 1 root root 29 Oct 18 07:42 oldboy.txt.bak -rw-r--r--. 2 root root 29 Oct 18 07:42 oldboy.txt-hard lrwxrwxrwx 1 root root 10 Oct 17 09:27 oldboy.txt-soft -> oldboy.txt [root@oldboyedu01-nb oldboy]# cp oldboy.txt{,.bak} [root@oldboyedu01-nb oldboy]# #cp oldboy.txt{,.bak} [root@oldboyedu01-nb oldboy]# echo oldboy.txt{,.bak} oldboy.txt oldboy.txt.bak [root@oldboyedu01-nb oldboy]# echo A{,B} A AB

 

正則表達式

1)什麼是正則?為何使用它?
  通過符號表示文字內容。

  提高效率,省事。
  支持正則表達式:Linux三劍客 grep sed awk

2)使用正則的時候註意事項
    #1] 正則表達式是按照行進行處理的
    #2] 禁止使用中文符號
    #3] 給grep和egrep配置別名
cat >>/etc/profile<<EOF
alias grep='grep --color=auto'
alias egrep='egrep --color=auto'
EOF

source /etc/profile

 

正則與統配符的區別

  用途                                 匹配的內容                       支持的命令
  通配符---用來匹配查找文件名      *.txt *.log 以.txt .log結尾的文件    大部分命令都可以使用
  正則-----在文件中匹配查找內容    包含oldboy的行                       Linux三劍客

 

正則表達式的分類

      名稱                                       符號                     命令
基礎正則(basic regular expression BRE) ^ $ . * [] [^] grep sed awk 擴展正則(extended regular expression ERE) | + {} () ? grep -E/egrep sed -r awk

 

基礎正則

 

準備測試環境
I am oldboy teacher!
I teach linux.

I like badminton ball ,billiard ball and chinese chess!
my blog is http://oldboy.blog.51cto.com
our site is http://www.etiantian.org
my qq num is 49000448.

not 4900000448.
my god ,i am not oldbey,but OLDBOY!

 

#1].  ^  以....開頭的行
[root@oldboyedu01-nb oldboy]# grep '^m' oldboy.txt
my blog is http://oldboy.blog.51cto.com
my qq num is 49000448.
my god ,i am not oldbey,but OLDBOY!

#2].  $  以....結尾的行
[root@oldboyedu01-nb oldboy]# grep 'm$' oldboy.txt
my blog is http://oldboy.blog.51cto.com

#3].  ^$ 空行 這一行中沒有任何的符號
[root@oldboyedu01-nb oldboy]# grep -n '^$' oldboy.txt
3:
8:

排除文件中的空行
[root@oldboyedu01-nb oldboy]# grep  -v '^$' oldboy.txt
I am oldboy teacher!
I teach linux.
I like badminton ball ,billiard ball and chinese chess!
my blog is http://oldboy.blog.51cto.com
our site is http://www.etiantian.org
my qq num is 49000448.
not 4900000448.
my god ,i am not oldbey,but OLDBOY!

#4].  .(點)  任意一個字元 不包含空行
    #-o 表示grep的執行過程 正則每次匹配到了什麼?

    找出文件中以點結尾的行
[root@oldboyedu01-nb oldboy]# grep '.$' oldboy.txt
I am oldboy teacher!
I teach linux.
I like badminton ball ,billiard ball and chinese chess!
my blog is http://oldboy.blog.51cto.com
our site is http://www.etiantian.org
my qq num is 49000448.
not 4900000448.
my god ,i am not oldbey,but OLDBOY!
因為 . 是正則符號,所以並沒有匹配出我們需要的內容。我們需要使用\將其轉義
#5].  \(撬棍)  轉義符號  脫掉馬甲,打回原形
[root@oldboyedu01-nb oldboy]# grep '\.$' oldboy.txt
I teach linux.
my qq num is 49000448.
  # \n     表示回車換行

#6].  *  前一個字元連續出現了0次或1次以上  >=0
    A
    AA
    AAA
    AAAA
[root@oldboyedu01-nb oldboy]# grep '0' oldboy.txt
my qq num is 49000448.
not 4900000448.
[root@oldboyedu01-nb oldboy]# grep -o '0' oldboy.txt
0
0
0
0
0
0
0
0

[root@oldboyedu01-nb oldboy]# grep '0*' oldboy.txt
I am oldboy teacher!
I teach linux.

I like badminton ball ,billiard ball and chinese chess!
my blog is http://oldboy.blog.51cto.com
our site is http://www.etiantian.org
my qq num is 49000448.

not 4900000448.
my god ,i am not oldbey,but OLDBOY!
[root@oldboyedu01-nb oldboy]#
[root@oldboyedu01-nb oldboy]# grep -o '0*' oldboy.txt
000
00000

Linux正則表達式之問題1.
為何會取出000 而不是
00 和0 0 0 0 #因為正則在表示 連續出現的時候表現出貪婪性 有多少吃多少 有多少匹配多少 Linux正則表達式之問題2.
為何使用
'0*' 會把整個文件的內容都顯示出來 #A*表示 # 連續出現了0次A ====>相當於什麼也沒有,就像是在匹配 ‘ ’ 。因此就會把整個文件的內容都顯示出來 # A連續出現了1次以上 A # 小結: 什麼是連續出現 -o的使用 #7]. .* 所有字元 所有符號 所有 #正則中表示連續出現 或 所有的時候 貪婪性 有多少匹配多少 找出文件中以m開頭的行並且以m結尾的行 [root@oldboyedu01-nb oldboy]# grep '^m.*m$' oldboy.txt my blog is http://oldboy.blog.51cto.com #8]. [] 中括弧 [abc] 相當於是一個字元 找出包含a或b或c的行 [root@oldboyedu01-nb oldboy]# grep '[abc]' oldboy.txt I am oldboy teacher! I teach linux. I like badminton ball ,billiard ball and chinese chess! my blog is http://oldboy.blog.51cto.com our site is http://www.etiantian.org my god ,i am not oldbey,but OLDBOY! [root@oldboyedu01-nb oldboy]# grep -on '[abc]' oldboy.txt 1:a 1:b 1:a 1:c 2:a 2:c grep '[a-z]' oldboy.txt grep '[A-Z]' oldboy.txt grep '[0-9]' oldboy.txt grep '[a-zA-Z0-9]' oldboy.txt 練習3:以 m或n或o開頭的 並且以 m或g 結尾的行 [root@oldboyedu01-nb oldboy]# grep '^[mno].*[mg]$' oldboy.txt my blog is http://oldboy.blog.51cto.com our site is http://www.etiantian.org [root@oldboyedu01-nb oldboy]# grep '[m,n,o]' oldboy.txt I am oldboy teacher! I teach linux. I like badminton ball ,billiard ball and chinese chess! my blog is http://oldboy.blog.51cto.com our site is http://www.etiantian.org my qq num is 49000448. not 4900000448. my god ,i am not oldbey,but OLDBOY! #9]. [^] [^abc] 排除a或b或c的內容 [root@oldboyedu01-nb oldboy]# grep '[^abc]' oldboy.txt I am oldboy teacher! I teach linux. I like badminton ball ,billiard ball and chinese chess! my blog is http://oldboy.blog.51cto.com our site is http://www.etiantian.org my qq num is 49000448. not 4900000448. my god ,i am not oldbey,but OLDBOY! #10].基礎正則小結 ##1)) ^ $ ^$ . * .* [] [^] ##2)) grep grep -o

 

擴展正則

+  | () {} ?

 

    #1].  +前一個符號連續出現了1次或多次  ,貪婪匹配,儘可能多的匹配
[root@oldboyedu01-nb oldboy]# egrep  '0' oldboy.txt
my qq num is 49000448.
not 4900000448.
[root@oldboyedu01-nb oldboy]# egrep  '0+' oldboy.txt
my qq num is 49000448.
not 4900000448.
[root@oldboyedu01-nb oldboy]# egrep  '0+' oldboy.txt -o
000
00000
[root@oldboyedu01-nb oldboy]# egrep  '0' oldboy.txt -o
0
0
0
0
0
0
0
0
符號 + 的應用
#把文件中連續出現的小寫字母取出來     #1.取出小寫字母 [root@oldboyedu01-nb oldboy]# egrep '[a-z]' oldboy.txt I am oldboy teacher! I teach linux. I like badminton ball ,billiard ball and chinese chess! my blog is http://oldboy.blog.51cto.com our site is http://www.etiantian.org my qq num is 49000448. not 4900000448. my god ,i am not oldbey,but OLDBOY!     #2.連續出現的小寫字母 [root@oldboyedu01-nb oldboy]# egrep '[a-z]+' oldboy.txt I am oldboy teacher! I teach linux. I like badminton ball ,billiard ball and chinese chess! my blog is http://oldboy.blog.51cto.com our site is http://www.etiantian.org my qq num is 49000448. not 4900000448. my god ,i am not oldbey,but OLDBOY!     #3.只保留連續出現的小寫字母 [root@oldboyedu01-nb oldboy]# egrep '[a-z]+' oldboy.txt -o am oldboy teacher teach linux like badminton ball billiard ball and chinese chess my blog is http oldboy blog cto com our site is http www etiantian org my qq num is not my god i am not oldbey but 小結: 1.可以把連續的東西通過正則取出來 2.一般與[]配合 #2]. | 或者 [root@oldboyedu01-nb oldboy]# egrep 'oldboy|linux' oldboy.txt I am oldboy teacher! I teach linux. my blog is http://oldboy.blog.51cto.com Linux正則表達式之問題3:[] 與 | 區別 都可以表示或者 [abc] a|b|c 區別: 1.[]基礎正則 |擴展正則 2.[]表示的是單個字元或者 |單個字元的或多個字元的都可 [a-z] oldboy|linux #3]. () 括弧中的內容相當於是一個整體 後向引用(反向引用) [root@oldboyedu01-nb oldboy]# egrep 'oldb(o|e)y' oldboy.txt I am oldboy teacher! my blog is http://oldboy.blog.51cto.com my god ,i am not oldbey,but OLDBOY! 先乘除再加減,有括弧的先算括弧裡面的。 #後向引用,反向引用,一般是在sed命令中使用 sed,把你想要的內容先保護起來(通過小括弧),然後再使用他。
    實例:需求,我要把123456用<>包起來 [root@oldboyedu01
-nb oldboy]# echo '<123456>' 當然不是這種玩賴的做法 <123456> [root@oldboyedu01-nb oldboy]# echo 123456|sed 's#(.*)#\1#g' 註意:\1 表示第一個小括弧 sed: -e expression #1, char 11: invalid reference \1 on `s' command's RHS [root@oldboyedu01-nb oldboy]# echo 123456|sed -r 's#(.*)#\1#g' 123456 [root@oldboyedu01-nb oldboy]# echo 123456|sed -r 's#(.*)#<\1#g' <123456 [root@oldboyedu01-nb oldboy]# echo 123456|sed -r 's#(.*)#<\1>#g' <123456> [root@oldboyedu01-nb oldboy]# echo 123456|sed -r 's#.(.)..(.).#\1#g' 2 [root@oldboyedu01-nb oldboy]# echo 123456|sed -r 's#.(.)..(.).#\2#g' 5 [root@oldboyedu01-nb oldboy]# echo 123456|sed -r 's#.(.).(.)(.).#\3#g' 5
#4]. o{n,m} 前一個字元連續出現了至少n次,最多m次。 o{n} 前一個字元連續出現了n次 o{n,} 前一個字元連續出現了至少n次 o{,m} 前一個字元連續出現了最多m次 [root@oldboyedu01-nb oldboy]# egrep '0{1,4}' oldboy.txt my qq num is 49000448. not 4900000448. [root@oldboyedu01-nb oldboy]# egrep -o '0{1,4}' oldboy.txt 000 0000 0 [root@oldboyedu01-nb oldboy]# egrep '0{3,4}' oldboy.txt my qq num is 49000448. not 4900000448. [root@oldboyedu01-nb oldboy]# egrep '0{3,4}' oldboy.txt -o 000 0000 [root@oldboyedu01-nb oldboy]# egrep '0{3,}' oldboy.txt my qq num is 49000448. not 4900000448. [root@oldboyedu01-nb oldboy]# egrep '0{3,}' oldboy.txt -o 000 00000 [root@oldboyedu01-nb oldboy]# egrep '0{3}' oldboy.txt my qq num is 49000448. not 4900000448. [root@oldboyedu01-nb oldboy]# egrep '0{3}' oldboy.txt -o 000 000 [root@oldboyedu01-nb oldboy]# egrep '[0-9]' oldboy.txt my blog is http://oldboy.blog.51cto.com my qq num is 49000448. not 4900000448. [root@oldboyedu01-nb oldboy]# egrep '[0-9]{8,}' oldboy.txt my qq num is 49000448. not 4900000448. [root@oldboyedu01-nb oldboy]# egrep '[0-9]{8,}' oldboy.txt -o 49000448 4900000448 #5]. ? 表示前一個字元連續出現0次或1次 gd good god gooood [root@oldboyedu01-nb oldboy]# egrep 'gd|god' li.log gd god [root@oldboyedu01-nb oldboy]# egrep 'go?d' li.log gd god [root@oldboyedu01-nb oldboy]# egrep 'go*d' li.log gd good god gooood

 

正則總結

# 1、正則符號
     連續出現(重覆)
            *        >=0    0次或者多次
            +        >=1   1次以上
            ?        0 1     0次或者1次
            {n,m}    >=n  <=m   至少n次,最多m次
            {n}      ==n     取n次
     其他
            .        任意一個字元
            [abc]    一個整體 相當於是一個字元a或者b或者c
                     [a-z] [0-9] [A-Z]
            [^abc]   排除
            |        或者
            ()       後向引用  反向引用  先保護再使用
            ^        以什麼什麼開頭
            $     以什麼什麼結尾
            .*       所有
            ^$       空行

#2、基礎正則與擴展正則區別:
      支持基礎正則            基礎+擴展
         grep            egrep === grep -E
         sed                  sed -r
         awk                  awk
    使用撬棍\ 也可以命令支持擴展正則(一般不用,遇到稍微複雜的會很麻煩)
    [root@luffy-01 oldboy]# grep 'god\|gd' alex.txt 
     gd
     god

#3、查詢幫助:
    man grep(簡單的幫助)
    查看詳細的幫助信息info grep

 

練習題

過濾文本(awk、sed)

1、請執行命令取出linux中eth0的IP地址(請用cut,有能力者也可分別用awk,sed命令答)

思路
1.定位-取出第2行
2.取出你要的ip地址

方法1-awk方法+awk+awk
[root@oldboyedu01-nb ~]# ifconfig eth0|awk 'NR==2'
          inet addr:10.0.0.200  Bcast:10.0.0.255  Mask:255.255.255.0
[root@oldboyedu01-nb ~]# ifconfig eth0|awk 'NR==2'|awk '{print $2}'
addr:10.0.0.200
[root@oldboyedu01-nb ~]# ifconfig eth0|awk 'NR==2'|awk '{print $2}'|awk -F":" '{print $2}'
10.0.0.200

方法2-awk+awk 
[root@oldboyedu01-nb ~]# ifconfig eth0|awk 'NR==2'
          inet addr:10.0.0.200  Bcast:10.0.0.255  Mask:255.255.255.0
[root@oldboyedu01-nb ~]# ifconfig eth0|awk 'NR==2'|awk -F "[: ]" '{print $4}'

[root@oldboyedu01-nb ~]# ifconfig eth0|awk 'NR==2'|awk -F "[: ]" '{print $11}'
inet
[root@oldboyedu01-nb ~]# ifconfig eth0|awk 'NR==2'|awk -F "[: ]" '{print $13}'
10.0.0.200
#遇到空格便切,前面有10個空格,切了10刀才遇到第一個非空格,太費勁了
#下麵使用不費勁的方法,用+匹配(一個或者多個) [root@oldboyedu01-nb ~]# ifconfig eth0|awk 'NR==2' inet addr:10.0.0.200 Bcast:10.0.0.255 Mask:255.255.255.0 [root@oldboyedu01-nb ~]# ifconfig eth0|awk 'NR==2'|awk -F "[: ]+" '{print $4}' 10.0.0.200 ##理解連續出現 理解 [] + [root@oldboyedu01-nb ~]# echo '######1@@@@@@@@2' ######1@@@@@@@@2 [root@oldboyedu01-nb ~]# echo '######1@@@@@@@@2' |egrep '[@#]' ######1@@@@@@@@2 [root@oldboyedu01-nb ~]# echo '######1@@@@@@@@2' |egrep '[@#]' -o # # # # # # @ @ @ @ @ @ @ @ [root@oldboyedu01-nb ~]# [root@oldboyedu01-nb ~]# echo '######1@@@@@@@@2' |egrep '[@#]+' ######1@@@@@@@@2 [root@oldboyedu01-nb ~]# echo '######1@@@@@@@@2' |egrep '[@#]+' -o ###### @@@@@@@@ [root@oldboyedu01-nb ~]# echo '######1@@@@@@@@2' |awk -F "[@#]+" '{print $2}' 1 [root@oldboyedu01-nb ~]# echo '######1@@@@@@@@2' |awk -F "[@#]+" '{print $3}' 2 方法3-awk #預備姿勢-通過awk取出 ifconfig eth0 結果中的 第二行的第二列 [root@oldboyedu01-nb ~]# ifconfig eth0|awk 'NR==2' inet addr:10.0.0.200 Bcast:10.0.0.255 Mask:255.255.255.0 [root@oldboyedu01-nb ~]# ifconfig eth0|awk 'NR==2'|awk '{print $2}' addr:10.0.0.200 [root@oldboyedu01-nb ~]# ifconfig eth0|awk 'NR==2{print $2}' addr:10.0.0.200 [root@oldboyedu01-nb ~]# #awk '找誰{幹啥}' #最終結果 [root@oldboyedu01-nb ~]# ifconfig eth0|awk -F "[: ]+" 'NR==2{print $4}' 10.0.0.200 方法4-sed+sed+sed [root@oldboyedu01-nb ~]# ifconfig eth0|sed -n '2p' inet addr:10.0.0.200 Bcast:10.0.0.255 Mask:255.255.255.0 [root@oldboyedu01-nb ~]# ifconfig eth0|sed -n '2p'|sed 's#^.*:##g' 255.255.255.0 [root@oldboyedu01-nb ~]# ifconfig eth0|sed -n '2p'|sed 's#^.*dr:##g' 10.0.0.200 Bcast:10.0.0.255 Mask:255.255.255.0 [root@oldboyedu01-nb ~]# ifconfig eth0|sed -n '2p'|sed 's#^.*dr:##g'|sed 's# Bc.*$##g' 10.0.0.200 方法5-sed命令的後向引用 ****** #原則-先把你想要的內容保護起來,然後在後面使用 [root@oldboyedu01-nb ~]# ifconfig eth0|sed -n '2p' inet addr:10.0.0.200 Bcast:10.0.0.255 Mask:255.255.255.0 [root@oldboyedu01-nb ~]# ifconfig eth0|sed -n '2p'|sed -r 's#^.*dr:##g' 10.0.0.200 Bcast:10.0.0.255 Mask:255.255.255.0 [root@oldboyedu01-nb ~]# ifconfig eth0|sed -n '2p'|sed -r 's#^.*dr:(.*) Bc.*$#\1#g' 10.0.0.200 方法6-sed #預備姿勢-ifconfig eth0第二行的inet替換為oldboy [root@oldboyedu01-nb ~]# ifconfig eth0|sed -n '2p' inet addr:10.0.0.200 Bcast:10.0.0.255 Mask:255.255.255.0 [root@oldboyedu01-nb ~]# ifconfig eth0|sed -n '2p'|sed 's#inet#oldboy#g' oldboy addr:10.0.0.200 Bcast:10.0.0.255 Mask:255.255.255.0 [root@oldboyedu01-nb ~]# ifconfig eth0|sed -n '2s#inet#oldboy#gp' oldboy addr:10.0.0.200 Bcast:10.0.0.255 Mask:255.255.255.0 #最終結果- [root@oldboyedu01-nb ~]# ifconfig eth0|sed -nr '2s#^.*dr:(.*) Bc.*$#\1#gp' 10.0.0.200 小結: 1.理解第2 3 5方法 2.瞭解6 3.awk指定多個連續的分隔符,sed的反向引用

 

2、如何取得/etc/hosts文件的許可權對應的數字內容,如-rw-r--r-- 為644,要求使用命令取得644或0644這樣的數字。

#方法1-awk
[root@oldboyedu01-nb ~]# stat /etc/hosts |awk 'NR==4'
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
[root@oldboyedu01-nb ~]# stat /etc/hosts |awk -F "[(/]" 'NR==4{print $2}'
0644


#方法2-sed
[root@oldboyedu01-nb ~]# stat /etc/hosts |sed -n '4p'
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
[root@oldboyedu01-nb ~]# stat /etc/hosts |sed -nr '4s#^.*\(##gp'
    0/    root)
[root@oldboyedu01-nb ~]# stat /etc/hosts |sed -nr '4s#^.*\([0-9]+##gp'
/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
[root@oldboyedu01-nb ~]# stat /etc/hosts |sed -nr '4s#^.*\(([0-9]+).*$#\1#gp'
0644

#方法3-stat命令的參數
[root@oldboyedu01-nb ~]# stat -c%a /etc/hosts
644

小結:
1.sed 反向引用  awk方法指定分隔符

 

3、已知/oldboy/test.txt 文件內容為:

oldboy

 

youxiaodao

 

pizza

請問如何把文件中的空行過濾掉(要求命令行實現)

#方法1-grep   -v表示排除
[root@oldboyedu01-nb oldboy]# grep '^$' test.txt


[root@oldboyedu01-nb oldboy]# grep -n '^$' test.txt
2:
4:
[root@oldboyedu01-nb oldboy]# grep -v '^$' test.txt
oldboy
xizi
xiaochao


#方法2-awk
[root@oldboyedu01-nb oldboy]# awk '/^$/' test.txt
[root@oldboyedu01-nb oldboy]# awk '不要/^$/' test.txt
awk: 不要/^$/
awk: ^ invalid char '⥠in expression
! 表示排除
[root@oldboyedu01-nb oldboy]# awk '!/^$/' test.txt
oldboy
xizi
xiaochao
[root@oldboyedu01-nb oldboy]## awk '不要/空行/' test.txt


#方法3-sed-刪除
[root@oldboyedu01-nb oldboy]# sed  '/^$/d'  test.txt
oldboy
xizi
xiaochao

小結:
1.通awk sed表示排除
2.awk !
3.sed d

 

 

4、已知/oldboy/ett.txt 文件內容為:

oldboy

pizzzzza

test

請使用grep或者egrep 正則匹配的方式過濾出前兩行內容

#如何通過-sed awk 實現過濾 === grep/egrep
[root@oldboyedu01-nb oldboy]# cat ett.txt
oldboy
olldboooy
test
[root@oldboyedu01-nb oldboy]# egrep 'oldboy' ett.txt
oldboy
[root@oldboyedu01-nb oldboy]# awk '/oldboy/' ett.txt
oldboy
[root@oldboyedu01-nb oldboy]# sed -n '/oldboy/p' ett.txt
oldboy
題目答案:
[root@oldboyedu01-nb oldboy]# egrep 'ol+dbo+y' ett.txt
oldboy
olldboooy
[root@oldboyedu01-nb oldboy]# awk '/ol+dbo+y/' ett.txt
oldboy
olldboooy
[root@oldboyedu01-nb oldboy]# sed -n '/ol+dbo+y/p' ett.txt
[root@oldboyedu01-nb oldboy]# sed -nr '/ol+dbo+y/p' ett.txt
oldboy
olldboooy
[root@oldboyedu01-nb oldb

小結:
1.sed awk如何實現過濾類似grep/egrep
2.awk定位的方法
awk 'NR==1'
awk 'NR==1,NR==10'
awk '//'

3.sed定位
sed -n '1p'
sed -n '1,10p'
sed -n '10,$p'
sed -n '//p'

 

文件

5、linux下通過mkdir命令創建一個新目錄/alexdir,alexdir的硬鏈接數是多少,為什麼?
     然後在alexdir下麵又創建了一個目錄 /alexdir/test,問alexdir的硬鏈接數量是多少?

[root@luffy-01 oldboy]# mkdir /alexdir
[root@luffy-01 oldboy]# ll /|grep alex
drwxr-xr-x    2 root root  4096 Jan 15 15:21 alexdir
[root@luffy-01 oldboy]# mkdir /alexdir/test
[root@luffy-01 oldboy]# ll /|grep alex
drwxr-xr-x    3 root root  4096 Jan 15 15:21 alexdir

 

查看一下:

[root@luffy-01 oldboy]# ls -lid /alexdir/ /alexdir/.
143565 drwxr-xr-x 3 root root 4096 Jan 15 15:21 /alexdir/
143565 drwxr-xr-x 3 root root 4096 Jan 15 15:21 /alexdir/.

 

2個文件的inode是一樣的。在當我們使用 cd . 的時候,也是進入了這個文件夾

創建之後,查看,果然是3個一樣的inode

[root@luffy-01 oldboy]# ls -lid /alexdir/ /alexdir/. /alexdir/test/..
143565 drwxr-xr-x 3 root root 4096 Jan 15 15:21 /alexdir/
143565 drwxr-xr-x 3 root root 4096 Jan 15 15:21 /alexdir/.
143565 drwxr-xr-x 3 root root 4096 Jan 15 15:21 /alexdir/test/..

 

 

6、請給出預設情況eth0網卡配置文件的路徑及客戶端DNS的路徑。

 /etc/sysconfig/network-scripts/ifcfg-eth0
 /配置/系統配置/網路-腳本/if(c f g)-eth0

 

 DNS的配置
 1./etc/resolv.conf
 2.網卡配置文件
 3.網卡配置文件裡面的DNS優先

 

替換

7、查找當前目錄下所有文件,並把文件中的www.etiantian.org字元串替換成www.oldboyedu.com

假設現在在/oldboy
 find /oldboy -type f -name "*.txt"

 #方法1
 find /oldboy -type f -name "*.txt"|xargs sed 's#www.etiantian.org#www.oldboyedu.com#g'
  (管道|什麼時候用xargs,什麼時候不用呢?)
 #方法2
 ##預備姿勢
 [root@oldboyedu01-nb ~]# #ls -l 此處存放著 which mkdir命令的結果
 [root@oldboyedu01-nb ~]# #ls -l  which mkdir
 [root@oldboyedu01-nb ~]# #ls -l $(which mkdir)
 [root@oldboyedu01-nb ~]# #ls -l `which mkdir`
 [root@oldboyedu01-nb ~]# ls -l `which mkdir`
 -rwxr-xr-x. 1 root root 50056 Mar 23  2017 /bin/mkdir
 [root@oldboyedu01-nb ~]# ls -l $(which mkdir)
 -rwxr-xr-x. 1 root root 50056 Mar 23  2017 /bin/mkdir
 ##最終結果
 sed 's#www.etiantian.org#www.oldboyedu.com#g'  此處存放著find命令的結果
 sed 's#www.etiantian.org#www.oldboyedu.com#g'  $(find /oldboy -type f -name "*.txt")

 #方法3
 find /oldboy -type f -name "*.txt"  -exec ls -l  {}  \;
  -exec 是 find的參數,{}接受前面find命令的結果

 

一個故障實例(被植入js)

7.1有一個實際是這樣的,情況是:一個lamp的伺服器,站點目錄下的所有文件軍備植入了js代碼,導致網站打開時就會調用這個地址,顯示廣告,造成很惡劣的影響,

 

解決方案:
#1、運營、網站用戶發現彈窗廣告
#2、運營報告給開發,開發聯繫運維,共同解決
#3、開發發現的問題就是,站點的目錄都被植入了js代碼
#4、運維人員解決問題:
##   1)運維備份原始出問題的原始文件
##   2)歷史備份覆蓋
##   3)find+sed覆蓋
#5、仔細查看日誌,尋找問題發現根源
#6、提供盲羊補牢解決方案(站點目錄嚴格許可權規劃方案,以及新上線發佈規範思路)

 

echo的參數使用

8、請問在一個命令上加什麼參數可以實現下麵命令的內容在同一行輸出。
       echo "oldboy";echo "oldboy"

# ;  ====>分號表示分隔多條命令
ls;pwd;hello

[root@oldboyedu01-nb ~]# echo -n "oldboy";echo "oldboy"
oldboyoldboy
# -n 表示取消輸出每一行結尾的換行符號

[root@oldboyedu01-nb ~]# echo -e "a\nb"
a
b
# echo命令的-e參數,就是讓echo支持\n \t 
[root@oldboyedu01-nb ~]# echo -e "a\nb\n\tc" >echo.txt
[root@oldboyedu01-nb ~]# cat echo.txt
a
b
    c
# -A顯示文件中的特殊符號
[root@oldboyedu01-nb ~]# cat -A echo.txt
a$
b$
^Ic$

 

時間命令

9、請給出如下格式的date命令,例:11-02-26。再給出實現按周輸出 比如:周六輸出為6,請分別給出命令。

date命令的使用

[root@oldboyedu01-nb ~]# date
Fri Oct 20 05:20:30 CST 2017
[root@oldboyedu01-nb ~]# #2017-11-11
[root@oldboyedu01-nb ~]# #date +格式
[root@oldboyedu01-nb ~]# date +%F
2017-10-20
[root@oldboyedu01-nb ~]# date +%Y-%m-%d
2017-10-20
[root@oldboyedu01-nb ~]# date +%w
5
[root@oldboyedu01-nb ~]# #顯示當前的日期以年-月-日_周幾

[root@oldboyedu01-nb ~]# date +%F_%w
2017-10-20_5

[root@oldboyedu01-nb ~]# date +%F_%w
2017-10-20_5
[root@oldboyedu01-nb ~]# date +%T
05:25:33
[root@oldboyedu01-nb ~]# date +%H:%M:%S
05:25:51

date命令按照格式顯示日期小結:
1.date +格式
2.%F ===> %Y-%m-%d 年-月-%T ===> %H:%M:%S 時:分:秒
  %w ===> 周幾

 

 

10、擴展問題:列印三天前的日期,格式如:2088-08-28

如何顯示指定日期:使用-d參數

[root@oldboyedu01-nb ~]# date
Fri Oct 20 05:28:44 CST 2017
[root@oldboyedu01-nb ~]# date -d "1day"  顯示1天後的日期
Sat Oct 21 05:29:07 CST 2017
[root@oldboyedu01-nb ~]# date -d "+1day" 顯示一天後
Sat Oct 21 05:29:18 CST 2017
[root@oldboyedu01-nb ~]# date -d "-1day" 顯示前一天
Thu Oct 19 05:29:42 CST 2017

[root@oldboyedu01-nb ~]# date -d "-1day" +%F   也可以制定顯示格式
2017-10-19
[root@oldboyedu01-nb ~]# date -d "1day" +%F    
2017-10-21
[root@oldboyedu01-nb ~]# #year month day hour min sec  格式順序

#顯示7天前的時間按照格式年-月-日_周幾
[root@oldboyedu01-nb ~]#
[root@oldboyedu01-nb ~]# date +%F_%w
2017-10-20_5
[root@oldboyedu01-nb ~]# date +%F_%w -d "-7day"
2017-10-13_5

 

 

修改系統日期:使用-s參數

[root@oldboyedu01-nb ~]# date 

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 目錄:https://www.cnblogs.com/liqingwen/p/10261436.html 當需要一系列整型值時,可以使用某種迴圈手動創建,或者可以使用 Enumerable.Range 方法。以下為代碼說明: var oneToTen = Enumerable.Range(1, 10 ...
  • " 【.NET Core項目實戰 統一認證平臺】開篇及目錄索引 " 上一篇我介紹了 的生成驗證及流程內容,相信大家也對 非常熟悉了,今天將從一個小眾的需求出發,介紹如何強制令牌過期的思路和實現過程。 .netcore項目實戰交流群(637326624),有興趣的朋友可以在群里交流討論。 一、前言 眾 ...
  • 聲明:問題雖然已經被解決,但是並沒有明白具體原理,歡迎大佬補充。 最近網站出現一個問題,在C#裡面使用 HttpWebRequest 類去發送post請求,偶爾 會出現 “套接字(協議/網路地址/埠)只允許使用一次” 的異常,很明顯應該是埠被占用。 原因排查: 1、網上說最多就是其他程式占用埠 ...
  • 一.概述 在上二篇中,主要是介紹了asp.net core mvc中路由的使用,這篇繼續介紹路由在ASP.NET Core Razor中的使用。Razor Pages應該使用預設的傳統路由,從應用程式的Pages文件夾中提供命令資源。還可以使用其他約定來自定義 Razor Pages 路由行為。 在 ...
  • 一、背景 在實際項目的開發當中,使用 Abp Zero 自帶的審計日誌功能寫入效率比較低。其次審計日誌數據量中後期十分龐大,不適合與業務數據存放在一起。所以我們可以重新實現 Abp 的 介面,來讓我們的審計日誌數據存儲在 MongoDb 當中。 二、實現 2.0 引入相關包 這裡我們需要在模塊項目引 ...
  • 程式目標: 實現DataGridView與BindingList<T>雙向綁定。用戶通過DataGridView修改值後立即更新BindList對象的值,代碼修改BindList後立即更新DataGridView的顯示。 實現環境:vs2017 C# WinForm Code: 1 ///***** ...
  • 狂神聲明 : 文章均為自己的學習筆記 , 轉載一定註明出處 ; 編輯不易 , 防君子不防小人~共勉 ! linux學習:【第3篇】軟體安裝及項目發佈 遠程連接 xshell , xftp軟體官網 : netsarang官網 Xftp : 遠程文件傳輸軟體 Xshell : 遠程終端模擬軟體 虛擬機中 ...
  • inode簡單理解 本文來源自網路文章,並針對文章內容加以批註和修改。希望能幫到你! 一. 磁碟設備 說到inode,首先必須要提及下《操作系統》中磁碟存儲器的管理一節。磁碟設備是一種相當複雜的機電設備(比較詳細的介紹可以參考blog硬碟內部硬體結構和工作原理詳解 )。 磁碟設備可以包括一個或多個物 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...