shell 教程,linux 筆記

 2023-10-18 阅读 32 评论 0

摘要:? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 《快樂的linux命令行》學習筆記 1.linux 目錄形式 ? ? ?\ ?(根目錄) ? ? ? ?-boot ? ? ? ?-bin ? ? ? ?-usr ? ? ? ?-... ? ? ? ?-home? ? ? ? ? - xiaoming ? ? ? ? - xiaowang ? ? ? ? - ... ? ? ? ? - xiaocao ? ? ?

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 《快樂的linux命令行》學習筆記

1.linux 目錄形式
? ? ?\ ?(根目錄)
? ? ? ?-boot
? ? ? ?-bin
? ? ? ?-usr
? ? ? ?-...
? ? ? ?-home?
? ? ? ? - xiaoming
? ? ? ? - xiaowang
? ? ? ? - ...
? ? ? ? - xiaocao ?
? ? ? ? ?-Proj
? ? ? ? ?-...
? ? ? ? ?-daydayup
? ? ? ?
?上一級 稱之為 "父目錄" , 下一級 稱之為 ”子目錄“. ?(路徑名字,其實大小寫是敏感的,因此不推薦重名)


相對路徑表示:"." 和 ".." : 其中 "."表示目前路徑; ? ".."表示上一級目錄


cd 命令:既可以用絕對路徑(始于根\),也可以用 相對路徑". .."
特殊的 "cd" ? ?進入自己的home
? ? ? ?"cd -" ?進入剛才的工作路徑,即上一次的
? ? ? ?"cd ~xiaoming" 進入xiaoming的home。
? ? ? ?
2.機器man 用不了,一般是沒有manpage.可以用 ls --help.來替代查詢。


3.mv dir 操作時,不需要加 遞歸-r



1. ls -lh ?參數h配合l,將文件大小以 K、M、G的形式顯示。更加直觀

shell 教程?? ? ls -l命令顯示結果

total 1.4M
drwxr-xr-x  6 caokang caokang 4.0K Apr  2 13:19 admin
-rw-rw-r--  1 caokang caokang 1.3M Apr  2 13:21 install.log

第一個字符"d"表示是 一個路徑 ; "-"表示是一個文件。它沒有子路徑了。

第一個caokang表示 文件所有者。 其權限是rwx ? ? ? ?第二個caokang表示 小組名。其權限是r-x. 最后的r-x表示其他人的權限。即:從左到又,也對應其權限。 ??

再往又,就是文件大小,已經文件夾名\或者文件名稱.

shell入門、<第五章: 操作文件和目錄>

1. mkdir directionary ...

? 語法是創建一個目錄.名字為 "directionary".其尾綴 三個點,表示,"directionary".是可以重復的.

即?mkdir dir1 dir2?dir3 等于創建三個路徑.

2. man cp 發現其語法介紹

UNIX/LINUX?? ?Copy SOURCE to DEST or multiple SOURECE(s) to DIRECTORY

       cp [OPTION]... [-T] SOURCE DESTcp [OPTION]... SOURCE... DIRECTORYcp [OPTION]... -t DIRECTORY SOURCE...

我們撿常用的來分析. ? [OPTION] 后綴三個點。表示這個選型是 可以疊加的。

SOURCE也尾綴三個點,即可以 把多個文件 拷貝到 ?某一路徑下面。(注意 DIRECTORY 和DEST的區別)


舉例: ?cp file1 file2 把file1 拷貝成file2. ? 這樣,每次重復copy都會直接覆蓋file2.

linux、? ? ? ? ? ?cp -i??file1 file2 覆蓋前會詢問下.

? ? ? ? ?-r 為遞歸copy,常用. ?

? ? ? ? ?-u 為 升級補漏.


2 mv 操作 ? ?

mv 跟cp很相似,但是 mv是剪切.

印象筆記linux版本?mv file1 file2 ?相當于剪切flie1 ,貼到file2.在一個路徑下,就相當于 renameq

mv dir1 dir2 剪切路徑,注意這個時候不需要加 -r選項.跟cp有些區別


3 rm操作

?linux下,有事就找男人(man)幫忙?

?rm [OPTION] ... FILE...

有道云筆記linux。rm 常用選項: -i ?提示信息、 -f強制操作(即使不存在該文件或者 unwritealbe,依舊刪除并往下進行) -r 遞歸. ?三個點 代表可以重疊使用

FILE 也可以重復. 比如 ?rm -fir ?file1 dir1 ? 刪除文件file1清空路徑dir1.

特別注意: linux下沒有恢復功能,找man也沒戲。所以慎用rm -r * 這類的操作。我之前就rm過 home下面的東西.


4. ln鏈接操作/

? 鏈接分為硬鏈接和軟鏈接(加參數-s soft).

shell bash、語法: ln (-s ) ?Filename ?ln_ID

?硬\軟鏈接會生成如下的文件:

-rw-rw-r-- 2 caokang caokang 14 Apr 10 23:07 a.v
lrwxrwxrwx 1 caokang caokang  3 Apr 10 23:09 bhard -> b.v
-rw-rw-r-- 1 caokang caokang  0 Apr 10 23:04 b.v
-rw-rw-r-- 2 caokang caokang 14 Apr 10 23:07 hard1

若使用vm 對hard1.v 或者bhard 進行編輯, 都會反饋到 a.v或者b.v文件中. 刪除ln_ID,均不會對文件造成影響.



shell高級編程、<第六章 使用命令》


1.命令 如cd \ls\rm等,其實都是由C或者C++語言寫成的函數。在使用時,相當于調用,并附加以參數。


2.命令參數后 【 l | p 】這種情況,代表 參數l、p只能出現一個。


3.命令行 一行可以輸入多個命令;
?比如 ?$ cd /usr/bin;ls;cd - ?
?這個過程是 先進入 /usr/bin/ 。然后顯示所有文件。再然后 cd - 返回原來的路徑。


4.為了節省輸入.可以自己創建一個 叫 lsbin的命令。來替代 cd /usr/bin;ls;cd - ?這一個過程。


首先 type lsbin 。會反饋告訴你lsbin是不是一個已經存在的命令。


如果不是,我們就第二步, ?alias lsbin=‘ cd /usr/bin;ls;cd -’


這之后,我們再用 type lsbin,就能看到 ?lsbin is alaised to ‘ cd /usr/bin;ls;cd -’


同時我們在命令行中輸入 ?$ lsb,會自動補全lsbin,即代表lsbin成了一個新的命令了。可以直接調用了


alias -p 可以看到所有 通過alias的命令。


好了,當我們不需要lsbin這個命令之后, 我們可以用unalias lsbin 就會刪除這個alias.即命令失效.
?
同樣的這個操作,只在本次的中斷內有效.



<第七章 ?重定向>

前半部分

1.重定向標準輸出 ? > ?.比如 $: ls -l /usr/bin > lsout.txt 每次執行時,都會把ls -l /usr/bin的結果 ,寫入lsout.txt文件中
多次執行,每次都會重寫覆蓋。
如果想每次都把命令運行結果,追尾寫。可以使用 >>
2. cat [OPTION]... [File]... ?命令用途: 連接多個文件/標準輸入 ,輸出到標準輸出。
? ?cat file1 file2 : 就是把文件file1\file2,連接起來,輸出到標準輸出(屏幕)
? ?cat file2 file2 > out.txt 就是把文件file1\file2,連接起來,輸出到標準輸出(被修改制定為文件out.txt)
? ?cat >out.txt : ?可以看到 cat空(或者-)。就好似cat標準輸入(鍵盤),輸出到out.txt文件。
? ? ? 這個需要注意的是,標準輸入時, 需要Ctrl+d。提示輸入完畢。
? ?cat file1 - file2 ?>out.txt : 相當于三個輸入,依次為file1、鍵盤、file2 .將這些東西連接在一起,輸出至out.txt??

? ?其中{OPTION]選項 主要有?

? ? ? ? ? ?-A ? : ?打印輸出所有符號,(包括 table ^I ? ?和 換行$

shell腳本入門。? ? ? ? ? ?-n ? : ?打印行號

? ? ? ? ? ?-s ? : 壓縮空白行,即多個空白行,只輸出一個。





3. wc -l filename : 統計一個文件的行數


4. grep 是個很強大的命令。


5. a | b | c ?命令a,輸出結果轉接給 b,進過一定的處理,再送給c。
? ? ? ? ? ? ? 這個時候,怎么確認命令b,執行是對的呢? 加入了一個tee命令
? ? ? ? ? ? ? tee [OPTION]...[FILE]... ? ? ?把 tee 輸入,copy 到 FILE里面去。
? ? ? ? ? ? ? 這樣 a | b | tee tmp.txt | c ?: 這個命令的效果 ? ?a | b | c
? ? ? ? ? ? ? ? ???/\
? ? ? ? ? ? ? ? ? ? ??屏幕
? ? ? ?就是把b的結果 復制一份 到 屏幕上(或者一個tmp文件中).


后面部分:

1. | 管道. ? a | b 相當于把a命令的輸出結果,連接給 命令b,作為其輸入。

linux題,? ? 所以 a | ?cmd b | c : 這里面的command b就相當于一個濾波器。 把 a的結果,經過一定處理,再輸送給c。

2. sort 命令。

記得在 tcl語言中碰到過 lsort, ?把list的內容按照 asic increasing 、descreasing排序等情況。


sort 就是linux中,用于排序的命令. (以行為單位,進行排序)

?sort ?[OPTION] ... [FILE] ... ? 命令功能: 以行為單位,把文件排序結果輸出到 標準輸出(屏幕)。

linux必學的60個命令?

參數我們不太可能面面俱到.下面撿幾個重要的.


-u ?: ?unique 如果行中,出現了一模一樣的行. 就會刪除一行.

-r ?: reverse ?進行反向排序

從命令功能中看出,sort結果會輸出到 標準輸出中,如果想用一個文件存儲,就要使用 重定向>

linux怎么學?

有時候,我們想把 sort的結果,直接覆蓋原來的文件. ? 這時候用重定向,就不行了. ?-o ?參數就開始發揮作用了 ? ? ? ?sort ?-u test,v -o ?test.v?


按數字排序. 如果 ?

11

101

shell基礎知識,?2

3

排序.結果 會是?

101

11

2

LINUX系統,3.

相當于按照 ASCii 排序, ?先比較第一個\排好,在比第二個. 不應定說誰長,誰就排后面

此時不是我們所想的 ?因為有可能是 十進制碼數字, ?這時候, 加入參數 -n 就可以解決.


再講述 -k 和 -t ?選項

例題:

shell入門教程、我們有個文件 : ?

banana:30:5.5
apple:10:2.5
pear:90:2.3
orange:20:3.4

第一個水果種類,第二個是個數. 最后是單價.

我們想 用 個數來排序.

因為 文件, 種類\個數\單價用冒號分離了. ?我們使用 -t : 來表明 分號是分隔符. 這樣 每行分割成 POS1 : POS2:POS3

-k 2 .制定比較開始 適用于POS2.

linux基本命令的使用。

$ sort ? -n -t : -k 2?test,txt ?-o??test,

apple:10:2.5
orange:20:3.4
banana:30:5.5
pear:90:2.3


默認情況下 ?-t 是指空格. ?每行的 ?pos1 pos2 pos3 pos4 可以直接指定


linux移動文件,


<第八章> 常見的linux符號使用.

1. ~:符號。在前面說過 ? ~后如果什么都不跟,就是進入自己的home。

~后跟xiaoming,就進入了小明的home

2.$ 符號是置換符號, 能把很多表達式的值,置換出來,但是在公司電腦里面就是不行, 家里的pc可以. 感覺是 eda工具吧$什么東西變成了它的 語法參數.

redis筆記。

3.{1,2,3} 相當于是個列表,會逐一取list值,套入命令中執行.

? ? mkdir {a,b}{1,2} 就會產生四個路徑: a1、a2、b1、b2. ?這個命令可以批量的創建很多目錄.


《第九章: 在命令行中,怎么減少鼠標的使用》

1. 新開terminal ?: ctrl+shift+t

2.關閉該terminal: ctrl+d (等于輸入 exit)

3. 清空該 terminal :ctrl+l (非i)(等于輸入 clear)

4.已經輸入一些 東西了.發現輸錯了.

? ?ctrl+ a: 光標移動到 命令行頭

? ctrl+e :光標移動到 命令行尾

? ctrl+f : 光標前移1 forward

? crtl+b :光標后移1 backward

?ctrl+d :刪除光標的字母. (delete)

? ctrl+k: 剪切光標到行尾.

?ctrl+u: 剪切光標到 行頭

?ctrl+y: 粘貼


5. history 命令.

這個命令會列出 我們所使用過的命令. 不用你在一個一個的用箭頭去翻看了.

直接history 他就會顯示出來.不過有個弊端 .它會把所有的都顯示出來.

但是有時我們根本不需要那么多, 所以 ?history 10 就只顯示出10個最近使用的命令了。

最近10個命令:

    6  cd dir27  ;;8  ll9  cd ../dir110  ll11  vim a12  ll13  history 14  history 1015  history 10

我們想使用 #9號. 那么使用 ? ?!9就可以了.


當然了,history | grep ?xxx ?也是可行的。幫助從幾百行的history中挑出你想要的



?<第十章 ?linux 權限 管理>


1. chmod 命令 控制 usr group other的 ?rwx權限。
常用兩種用法: ?chmod 777 fliename: 把權限都賦予 rwx。
? ?chmod u+x,g-rw,o-rw fliname ?給usr增加執行,group other都刪掉rw權限。
? ?chmod u=rwx filename usr權限直接賦予rwx
? ?


2. umask 控制 新建的目錄/文件的 默認屬性。
? ?
? ?規則: umask = 22
? ?
?umask存儲的是補碼。 ? ? ? ? ? ? ? ? ? ? ?
? ?rwx rwx rwx ? ? ? ? ? ? ? ? ? ? ? ? ? rw- rw- rw-?
? 000 010 010 ? ? ? ? ? ? ? ? ? ? ? ? 000 010 010 ?( 可以用 umask 0 修改成 000 000 000)
? ------------- ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? -------------
? ?rwx r-x r-x ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?rw- r-- r--
? ?
其中新建的路徑 都是有x權限. ? ?然而新建的文件,是默認沒有x權限的。




如果想修改 umask 值,可以直接 ?umask 000。這樣 新建出來的路徑都是 777權限,新建的文件都是666權限。




但是 很多情況下,我們沒有必要去修改這些參數。直接使用 chmod 新增一部分就好了。




<第11章,進程管理>

1. ps 命令: ?顯示目前terminal所運行的 所有 進程.

2. ctrl+c 會終止任意命令,如verdi3

3. 如果想讓一個命令運行在后臺, 則 末尾加上 & .之后 運行后 按下Enter鍵后,shell依舊可以輸入命令.

? ? 但是此時, verdi進行后臺了,我們怎么通過shell 來關閉它呢 ???

? ? 首先通過jobs 查看 目前shell窗口下面運行著什么 .比如我們一個shell下面 跑 ?dc_shell & 和 verdi &?

此時 jobs命令返回的結果是:

[caokang@caokang aaa]$ jobs
[1]-  Running                 verdi &
[2]+  Stopped                 dc_shell

先讓他浮出水面, fb 1/或2 ? 然后ctrl c 停止就或以。

4. 如果忘記 verdi 加& ,等其跑起來.我們可以 ctrl+z.使其進入后臺,但是注意此時, verdi處于了 stopped狀態,

?如果想讓他重新工作起來,可以用bg 1.

即 ?如果忘記輸入了 & : 可以用ctrl+c ? bg命令替代。


《第十二章 ?shell環境 》

?1. terminal 僅僅是個界面而已。它把鍵盤的輸入存入、顯示;同時交給shell去解釋、shell返回的結果再顯示出來。(只顯示標準輸入和標準輸出)

shell 是一類 解釋型程序的總稱呼. ? 主要包括有 ?sh 、bash、csh 等等。可以這樣設想下:

C語言中有這樣一種函數: ?

? ? ?void ? shell_bash ? ( input ?STDIN ? ?output : Result )

? ? ?{

? ? //---------------------------------

? ? ?PC默認配置

? ?//----------------------------------

? ? case(STDIN)

? ? ? ls: ? find ls --> ? function(dispaly) ? ? // 啟用function___display

? ? ?cd: ?find cd?? ?function( enter into ) //啟用function___ enter folder

? ? ?rm: find rm?? ?function(delete file) //啟用function___delete file?

? ? ?。。。。


? ? ? }?

可以這樣說 ?shell_bash是一個函數,它把 STDIN 讀入,然后解釋STDIN,調用函數function.并把結果 送出(Result).


同時 人們為了更好的性能追求,在shell_bash這個經典的范本的基礎上做了部分修改。演化出了 ?csh等。其實他們的工作原理都是一樣的。


2. ?環境變量和shell變量.

環境變量.是描述計算機基本信息的參數.比如Home路徑、history_size 、 命令提示符 ?[caokang @ caokang Proj] $的顯示格式定義。

這一類的計算機參數。以及各種PATH路徑定義. 這些參數可以修改.但是必須等到我們十分熟悉的時候,再去修改每個環境變量.

shell變量呢,就可以十分隨意了,比如 給字符串定義一個別名(alias),制定商用程序的啟動路徑之類的。這些參數往往處于 工作效率的考慮,

會經常的增減。但是目前我還不了解,如何定義一個shell變量? 什么時候定義? 定義的語法是什么 ? ?希望以后了解 環境變量、shell變量之后再做補充。


3. 大致描述下 ls的工作原理。

鍵盤輸入ls ---> 去PATH中去匹配查找----->找到了,執行該x文件,(結合目前系統的參數,logname\group信息),給出文件列表和 權限--->

輸出到屏幕

啟動商用程序(DC綜合軟件)過程

鍵盤輸入dc_ck ---->去PATH中匹配查找----->找到了,它是shell變量” alias dc_ck = dc_shell“. ----> ?再PATH中再去找dc_shell----->

找到了可執行的dc_shell文件,然后執行它..... ? ? 這樣一個過程,其實相當于我們 在windows下面的 雙擊 程序exe快捷鍵.


<14章 ?shell提示符>
1. 我們直到 shell是一類,包括有bash、csh、dash等,他們內部定義的參數名其實是不太一樣的。
? ?比如 bash里面 ?[caokang @ beken-4 case_adc] 這個參數:是整個提示符變量。在bash里面,它存儲在PS1里面。
? ?然而在csh里面,這個變量名,變成了 prompt.(所以你在csh里面,echo $PS1 會報錯)。


2. 以上的知識,應該幫助我們理解為何 ?有時候 書本上的命令,在家可以用,在公司的PC里面卻不能用。因為家里是bash,公司是csh


3. prompt變量 set prompt = "[%n@ $color_green %c $color_white]%#"
? ??
? ?(1) ?注意 " "和''區別 .
? ?(2) ?%n 登錄名
? ?(3) ?$color_green : 表示從此之后,顏色變為綠色。
? ?(4) ?%c 當前工作目錄的最后部分
? ?(5) ?$color_white : 顏色回到 白色
? ?(6) ?%# $符號
? ?
? ?這樣顯示出來的 提示符 ? [caokang @ case_adc]$ ? 其中case_adc是綠色字體。
? ?
? 以上是一個例子,我們還可以自由的設計其他 提示符.
??
? 通過該章節,我們最應該了解的 知識點2 .不同shell的參數是不一樣的。


<15章 軟件包的管理>
1. 回顧在windows下面安裝選件過程:
? ?從某一個網站(360軟件中心)下載 qq2015.exe文件。然后雙擊,選擇安裝路徑-->選擇安裝選項--->安裝過程---> 安裝完成,生成快捷方式。
? ?或者從同學那邊拷貝一個軟件到本地、然后安裝。
? ?那么,在Linux下面,連基本軟件怎么安裝都很困惑。軟件去哪里下載都不知道。


2. linux系統,獲取軟件的途徑也有兩個。
? ? (1) 通過內置的 類似于(軟件中心、應用市場)的東西,基本的軟件都可以在這里面。?
? ? (2) 從非知識產權保護的軟件下載一個軟件。
? ? (3) 到底該怎么樣安裝呢???


3. 眾所周知,linux陣營分成兩派,redhat系列和 debian系列。redhat的軟件包以 “xxx.rpm” ? debian的軟件包以“xxx.deb”
? ?下面以 redhat系統為例。
? ?
4. 依賴性: 在linux下面,因為軟件碎片化、每個軟件都會牽連。 比如安裝程序a的前提是 必須已經安裝了 b和c .而安裝b之前必須要
? ? ? ? ? ?安裝d. 這就是 軟件包的依賴性。
? ?
5. 通過 資源庫(軟件中心)安裝一個程序: ? yum -install packagexxx
? ?它會完成以下: (1) 下載、(2)環境分析 (3)自動修補依賴性 (4) 安裝 ? ? ? ?
? ?yum是一個懶人模式、它會自動的下載、修補依賴性并安裝。
? ?
? ?yum 語法: ? yum ?[OPTION] COMMADN
? ? ? ?其中[OPTION]有 -h -t 之類的。可有可無
? ? ? ?CMOMAND選項: install
? ? ? ? ? ? ??erase?
? ? ? ? ? ? ? ? ??search
? ? ? ? ? ? ? ? ??update
? ? ? ? ??info
? ? ? ? ? ? ? ? ?。。。 ? ?從-help上看,yum指令的COMMAND,制定了特定的操作,如 安裝\卸載\查找\升級? ??
? ?
? ??
6. 通過 本地copy 安裝一個 rpm。 使用 ? rpm -i packagexxxx。這個僅僅是安裝程序包,當遇到依賴性問題時,安裝失敗,報錯
? ??
? ?rpm [option ...]?
? ? ? ? -i 安裝
? ? ? ? -e 卸載
? ? ? ? -U 升級
? ? ? ? -t 測試(不安裝,只測試其環境)
? ? ? ??
??
7. 在redhat里面是 yum和rpm的天下,在debian里面是 apt-get 和dpkg命令?



<18 查找文件>


1. locate 只能根據


2. find [path...] [experation]
? ?默認 path是當前路徑、 experation是 printf
? ?
? ? ? ? ? ?
? ?是不是這樣理解: ?find ?path... ? [test & operators ] ?[action] ? ? ? ?
? ? ? ? ? ? ?查找path路徑、滿足 test條件時,執行action。 ?
? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ?(1) path路徑可以是絕對路徑或者相對路徑。 path1 [path21] ?它會把path1以及其下的所有子目錄都翻一遍
? ?
? ?(2) 條件test可是五花八門: ?比如按名字、大小、時間、文件類型、權限、歸屬等。
? ? ? ? ? ? ?| -name pattern ? ?pattern 可以直接就是 文件名,或者使用 "正則"
? ? ? ? ? ? ?| -iname patern ? ?不區分大小寫
? ? ? ? ? ? ?| -user username ?或者 -group gname ?根據文件歸屬查找
? ? ? ? ? ? ?| -perm 754 ?wrx w-x w-- :相當于找到是這個權限的。
? ? ? ? ? ? ?| -perm +111 user可執行或者group可執行、或者other可執行,只要這三個條件滿足一個就可以了。
? ? ? ? ? ? ?| -perm -121 必須滿足 user可執行 & group可寫 & other可執行 ,必須滿足這三個條件。
? ? ? ? ? ? ?| -type f(普通文件) d(目錄) l(鏈接)...
? ? ? ? ? ? ?| -size +1k(大于1k) -5k(小于5k) ? ? ? ?(注意 下面所有帶參數,都是+代表大于,-代表小于)
? ? ? ? ? ? ?| -cmin -5 :在5分鐘之內,修改的 屬性或者內容的。 ?
? ? ? ? ? ? ?| -mtime -1 : 在一天之內,僅內容修改過。
? ? ? ? ? ? ?| -anewer file: 比文件file之前訪問的。 ??
? ? ? ? ? ? ?| 上面三個, a代表訪問、m代表 僅內容修改過、c代表任何變動。 min代表分鐘、time代表一天 ?一般c用的較多。?
? ? ? ? ? ? ??
? ? (3)為了更好的組合 條件,引入了 operators,用于 組合test。
? ? ? ? ? ? ?-and ?把and 前后兩個條件 &起來?
? ? ? ? ? ? ?-or ? or前后兩個條件 |起來
? ? ? ? ? ? ?-not ?非 后面的條件。 比如 -not -type f :非普通文件
? ? ? ? ? ? ?-() ? 可以使用(),構造優先級。 ?但是需要注意轉義符 \( expr1 -and expr2 ? \) -or (-not expr3)?
? ??
? ? (4) action : 該項默認是 -print 即輸出到標準輸出。
? ? ? ? ? ? ? ? ?同時還有其他常用的幾個選項:
? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? |-ls ? ? 列出
? ? ? ? ? ? ? |-delete 刪除
? ? ? ? ? ? ? |-exec rm "{}" ";" :相當于對test判斷的結果執行 rm操作。 ?注意 "{}" ";"是尾綴,代表命令rm的 對象和 結束。 ?
? ? ? ? ? ? ? |-ok rm "{}" ";" ? :跟exec一樣,只是每次都會詢問user 是否要rm。?
? ? ? ? ? ? ? |-ok rm "{}" + ? ? :跟上面類似,但是 這個相當于 先把test結果都找到,編程一個list表 +,然后做為rm的對象
? ? ? ? ? ? ? |find -name "*.v" | xargs ls -l :相當于把 find結果,管道傳給 xargs,然后 xrags用于 ls的對象 即 ls -l argus


3. 借上面的內容,在此處講下 shell命令行里面的 通配符\元字符和轉義符.

? ? ?通配符: 通常出現在 ?命令的參數中, 更多的是作為 操作對象.

? ? ? ? ? ? ? “*”(>=0個字符) 、?" ? "(1個字符)、[ab] a或者b 、 [!ab]非a且非b 、

? ? ? ? ? ? {str1 str2} 字符串1 或者字符串2、?[c1-c2] c1到c2

? ? ? ? ? ? 通配符與 正則表達式是不一樣的,他們是shell簡便的表達. (按照道理來說,正則表達式應該是 從它演變過去的)

? ? ? ? ? ? 在命令參數中, 遇到這寫字符,對應的shell命令的c++會解析他們并匹配 還原"參數". ?然后才 執行命令.

? ? 元字符: 這是一群特殊 函數功能的 字符。 比如 & (后臺運行)、 |(管道輸出)、$(參數置換)、>(輸出重定向) 等。

? ? ? ? ? ? ? ?他們使用了一些 特殊的字符,就是為了特殊化,以起到視覺效果。

? ? 轉義符: 當越來越多的字符,被賦予了特殊意義,為了能 正常普普通通的使用這些字符,設計了轉義符。

? ? ? ? ? ? ? ? 單引號 ?' ?' : 內部字符全部作為普通字母。

? ? ? ? ? ? ? ? 雙引號" " :雙引號內部,只存在變量置換$ ?` 命令引用等少見的幾個符號還有特殊意思。 其余都變成普通字符

? ? ? ? ? ? ? ?反斜杠 \ ?: 反斜杠,只把其后的一個字符變為 普通字符。


工作原理: ?如果shell 命令行中碰到轉義符,會根據 雙引號、單引號、反斜杠執行不同的 替換功能。然后再運行程序。?



<第十九章 ?歸檔和備份>

?我們從別的地方下載下來的東西,很多都是 ?.tar .tgz. .gz格式。傻傻分不清楚。 我們也了解這是 壓縮格式,但是怎么解壓縮?

?還跟windows一樣雙擊? 本章節就講述這些操作。


1. ?gzip: ? 我們知道windows下面的壓縮包一般是zip格式的。那么容易記憶 gzip就是壓縮的命令。

? ? ? ? ? ? ? ? ?常用 gzip aaa.v ?: 壓縮文件,原文件消失,壓縮文件名不必定義,就是aaa.gz ?

? ? ? ? ? ? ? ? ? ? ? ? ? gzip -c aaa.v > haha.gz ?: 壓縮文件,同時保留原文件、并壓縮文件稱haha.gz ? ? ?(用 -c 一定要制定 壓縮文件名)


? ? ? ? ? ? ? ? ? ? ?-r 為遞歸壓縮,用于含路徑的壓縮。 ?遞歸壓縮,不是把他們合成在一起壓縮,而是每一層每一個文件單獨壓縮. ?知識相當于 批量壓縮操


2. gunzip : 與壓縮命令相反,用于解壓縮。 -c 保留原.gz文件。

? ? ? ? ? ? ? ? ? ?-r : 遞歸 是逐個解壓縮。


還有其他的壓縮命令: bzip2 bunzip2?


3. 關于 tar的用法 ,在公司的文檔中.后面希望補充進來.

? ?我們知道 批量遞歸壓縮,是把每個文件都壓縮。其實不太符合我們想要的。
? ? 最好是把所有文檔,歸結成一個 文件。然后再對這個文件進行壓縮。 下面講的tar就是 歸檔命令。
? ??
? ? tar 主選項 ?[副選項...] tar名 + file/dir
? ? ? ? ?| c ?創建tar包
? ? ? ? ?| x ?解包
? ? ? ? ?| t ?查看包內容(并不解包)
? ? ? ? ?| u ?更新包內文件
? ? ? ? ?| r ?追加新內容 ? ?
? ? ? ? ? ? ? ? ? | p 保留原屬性
? ? ? ? ? ? ? ? ? | v 可視化
? ? ? ? ? ? ? ? ? | f 制定 tar包名稱。(必須放在最后,并緊跟 tar包name 最好以 .tar結尾
? ? ? ? ? ? ? ? ? | z 對tar包進行 gzip壓縮。(注意此時,f參數 仍在最后,tar_name 最好帶有后綴 tar.gz
? ? ? ? ? ? ? ? ? | j 和z一樣,不過壓縮成bzip2格式 ? ?
? ? ? ? ? ? ? ? ??
?(3) ?如果后面的file,是使用相對路徑描述的。那么壓縮目錄也就只到該目錄
? ?若使用絕對路徑,那么壓縮目錄 就從根目錄起。
? ?
? ?
?(4) ?zip 和unzip :我們知道在windows下面,zip為主要壓縮格式,為了和linux更加方便共享。linux下也有zip壓縮命令。
? ? ? ? ? ? ? ? ? ? 常用 zip -r xxx.zip file/dir ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ? unzip ? xxx.zip
? ? ? ? ? ? ? ? ? ? 這個命令主要就是跟 windows打交道。 在linux下,打包壓縮,主要還是 tar czvf?



? ? ? ? ? ? ? ? ??
<第二十章 ?正則表達式>?


1. 正則表達式,是為了方便的描述的東西。?
? ?
2. grep 函數: 全程 global search ?regular expression and print out
? ? ? ? ? ? ? 即 匹配rep,并打印出來。 本質上就是 匹配"正則表達式"。
? ? ? ? ? ? ? grep [OPTION]... PATTERN [FILE]....
? ? ? ? ? ? ??
? ? ? ? ? ? ? 整個grep C++函數工作原理: 1. shell命令行 先分析參數列表。完成必要的 通配\轉義\元字符轉換。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 2. C++ 分析整個 PATTERN. 翻譯出它想要表達的意思。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 3. 對FIle文件逐行的進行匹配。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 4. 輸出結果。
? ? ? ? ? ? ?為了避免 shell命令行 在第二步驟中,先把特殊字符置換。提倡對PATTERN使用單引號。’PATTERN‘
? ? ? ? ? ? ?
? ? ? ? ? ? ?
3.[OPTION]選項中,有針對rep的,有針對輸出選項的。?
? ?
? ?rep選項:
? ? ? ? ? ? -i : 正則表達式忽略大小寫?
? ? ? ? ? ? -f Filex :表示這個 PATTERN 來自于文件Filex.(如果是多行的,會一行一行的匹配)
? ? ? ? ? ? -v :翻轉,專門找不匹配的
? ? ? ? ? ? -w : PATTERN做為一個單詞項 匹配
? ? ? ? ? ? -E :如下文第5條目。整個正則表達式是 擴展型正則表達式
? ? ? ? ? ??
? ?
? ?輸出現象: -A NUM ?打印匹配行 以及該行之后的 NUM行。比如: -A 1 .就打印出 匹配行和下一行
? ? ? ? ? ? ?-B NUM ?與上面類似,是Before 行
? ? ? ? ? ? ?-- color 顏色標注。
? ? ? ? ? ? ?-c ? ? ?只輸出匹配行的數目。 (此時,--color -A 1 之類的參數就會自動失效了)
? ? ? ? ? ? ?-n ? ? ?輸出時,順便附帶上 其行號
? ? ? ? ? ? ?-o ? ? ?默認輸出是一行內容,-o表示只輸出匹配值。(此時 -A 1 失效)
? ? ? ? ? ? ?-h ? ? ?hide 隱藏 輸出的前綴 文件名。
? ? ? ? ? ? ?-l ? ? ?只輸出 匹配項所在的 文件名
? ? ? ? ? ? ?-L ? ? ?只輸出 不匹配項 的文件名
? ? ? ? ? ? ?
4. 正則表達式 PATTERN
? ?特殊符號 ^ $ [] - * . ? + {} | () \ ?以及字母和阿拉伯數字。?
? ?通過賦予 特殊符號 特定的意義,配合上正常字符,來表達抽象難以用程序語言表達的東西。
? ? ?
? ? ?“.” ? ?: 代表任意一個字符。可以看出他有兩層含義,第一是任意字符,第二是 它的數量是 1個字符。
? ? ?“^” ? ?: 錨定符,^it 的真正語法是: 以i開始,并緊跟t,等價于以 it開始的行
? ? ?“$” ? ?:錨定符,is$ 的真正語法是: ?以s結尾,s前必須是i。等價于 以is結尾。
? ? ?“|” ? ?:在正則表達式內,表示 或的關系。用于多個匹配項的連接
? ? ?“[ab]” :任意一個字符,均可。 比如 i[ts]就能匹配 it或者is
? ? ?“[^ab]”:非a非b的字符。 比如i[ts] 無法匹配it或者is,但能匹配 in io之類的
? ? ?“[a-z]”:如果讓輸入abcdefg....xyz會十分麻煩。簡便的增加了一個"-"符號。就能節省很多?
? ? ? ? ? ? ? 默認情況下 a-z 代表著abcdef...xyz.但也有unix系統內 a-z表示aAbBcC...xXyYzZ.一般由系統語言參數決定。?
? ? ? ? ? ? ? 一般推薦直接改掉系統參數。
? ? ? POSIX還制定了一個折中的表達方法: 用第三種描述方法:
? ? ? ? ? ? ?[:alnum:] 字母和數字集合、相當于a-zA-Z0-9。 (應當理解為何多加入了:,否則[alnum]就是一個rep了)
? ? ? ? ? ? ?[:alpha:] 純字母集合 A-Za-z
? ? ? ? ? ? ?[:digit:] 純數字集合 0-9
? ? ? ? ? ? ?[:upper:] 大寫字母集合 ,
? ? ? ? ? ? ?[:lower:] 小寫字母集合.
? ? ? ? ? ? ?[:xdigit:]十六進制數集合 0-9A-Fa-f
? ? ? ? ? ? ?[:space:] 空格
? ? ? 特別注意的是,[:alpha:]只是表明一個字符集合。
? ? ? [:alpha:] = a-zA-z. 必須要[[:alnum:]]使用表示一個純字母。
? ? ? 或者[ [:alpha:][:digit:]] 這相當于[[a-zA-z][0-9]]
? ? ??


? ? ??
? ? ? 下面進入量詞階段。(都是形容前面一項 出現的次數)
? ? ? “*” ? :表示 0-無窮個字符。
? ? ? “?” ?:表示 0-1個
? ? ? “+” ? :表示1-無窮個字符
? ? ? {m,n} : 至少出現m次,但不多于n次
? ? ? ? ? ? ?{,n} 不多于n次
? ? ? ? ? ? ?{m,} 至少m次
? ? ? ? ? ? ?{m} ?恰好m次
? ? ? ? ??
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
5. 基本正則表達式和擴展性正則表達式的區別
? ?
? ?這兩個表達式的區別主要在于 部分字符的定義上。兩者共同支持: ^ $ . [] * ?
? ?對于其他的符號來說:
? ?基本正則表達式 ?() {} | ? + 本省是普普通通的符號。 ? ? ? ? ? ? 想使用特殊意義,需要加\.
? ?擴展正則表達式 ?() {} | ? + 就是特殊符號,本身就帶有特殊意義。 想普普通通用,需要加\。 ?

?



<第二十一章 ? 文本處理>

借用一句似懂非懂的話,linux萬物皆文本。

那么怎么處理文本,將會變得十分重要. ?其實在ic設計中,碰到所有問題也基本是文件。如verilog.v ? log 報告。工具啟動文件。testcase.v等等

那么一般都對文本做什么操作?

針對一個文本來言, ? ①修改文本: ?插入、刪減、替換、重新布局、

? ? ? ? ??②提取信息: 尋找關鍵信息、統計文本。

針對若干文本來言: ①逐個文本進行以上處理。

?②文本之間的 連接、比較之類的操作。


1. cat命令. ? 拼接文件并標準輸出。

? ? ? ? ? cat [OPTION] ? [FILE]... ? ? 把 file1 ...filen 拼接在一起,并輸出出來。 [OPTION]一般是關于輸出項的 選項。??

凡是帶有 file項的。如果不加任意選項或者為-,代表 從鍵盤輸入,并且鍵盤輸入要以ctrl+d結束。

凡是能標準輸出的東西, 如果加上 輸出重定向,就能改變輸出目的地。

所以 cat > test.txt ? ? ?cat - > test.txt. ?就相當于 新建一個文本(沖刷掉原來的內容)。


[OPTION] ? ? -A : ?顯示所有字符,包括 Table^I 和換行符$。 (cat 文件,看換行,就能區分 dos文件和unix文件)

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? -n ? : ? 顯示行號

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? -s ? : 壓縮顯示空白行。(連續多個空白行,只顯示一個)


cat -n test.txt > file.txt 相當于 對test加 行號操作; ? cat -s test.txt > file.txt 操作就相當于 壓縮空白行的操作。



2. sort ?[OPTION] ... [FILE] ... ? 命令功能: 以行為單位,把文件排序結果輸出到 標準輸出(屏幕)。

? ? ? ? ? ? ?| -b ?默認情況下,sort以行為單位, 從第一個字符開始。空格也算是字符。 當想從第一個非空格符開始排序,需要加上-b?

? ? ? ? ? ? ?| -n 按照數字大小比較

? ? ? ? ? ? ?| -r ?反向排序

? ? ? ? ? ? ?| -f ?忽視大小寫

? ? ? ? ? ? ?| - k 5 從pos5 開始進行排序

? ? ? ? ? ? ?| -t ? ? 指定某個字符為Pos的分割符號 ?(默認是table和空格)

? ? ? ? ? ? ?| -o ? file 指定輸出位置

? ? ? ? ? ? ?| -u ?unique ,即排序中遇到完全一樣的行,就丟掉一個。


上面的很多參數都比較常見、重點討論下 -k選項

-k 2 ? ? ? ?:表示從 POS2 排序,直到結尾

-k 2nr ? ? : 表示從 POS2 --尾按照-nr排序,POS1再按照ascii排 ? ? ? ? ? ? (重排是針對于 POS2 -nr一樣的行)

-k ?2,2 : 表示從POS2開始排序,結束到2. 然后在從POS1 排。

-k ? 2,2nr ?: 表示對 POS2按照 -nr參數排序,完事后從POS1、POS3...按照ascii排序

-k ? 2,2nr ?-k 3r ?:表示對POS2 按照-nr排序,對POS3---尾按照-r排序。POS1按照ascii排


-k ?2.1,2.5: 表示從POS2的第一個字符到第5個字符進行ascii排序。



3. cut ? - remove sections from each line of files ?意思很明確,是從files 的每一行中,刪掉某些 文本段,并輸出至標準輸出。

那么怎么判斷 需要該刪除什么內容呢? ??

? ? ? ? cut ?[OPTION] ... [FLIE]...

? ? ? ? ? ? ? ? ? | -c ? N ? ?: ? cut輸出每行的第N個字符;?

? ? ? ? ? ? ? ? ? ? ? ? ? N-M ? ?輸出第N至M個字符

? ? ? ? ? ? ? ? ? ? ? ? ?-N ?前N個字符、 M- 代表 第M個至結尾。(這個也是經常用的,因為每行的 字符數目是不一樣的)

? ? ? ? ? ? ? ? ? | -d ‘:’ 指定冒號是分隔符. ?POS1:POS2:.... POSn ? ? ? ??

? ? ? ? ? ? ? ? ? | -f ?指定POS值。

? ? ? ? ? ? ? ? ? | -complement ?相當于取反輸出。輸出哪些非cut字符

? ? ? ? ? 一般而言,-d -f 是一起用;-c 單獨使用。 ?并且默認 分隔符號是 Table鍵,不是空格鍵。 所以在使用空格鍵為分隔時,需要特別的 定義 -d ' '?


這個cut命令 主要是為了從 某一個文件中得到 某一POS位置的字符.并輸出重定向保存下來, 以備后用


1. paste 命令 ?把文件1和文件2 每行,連接在一起。中間使用 分隔符
? ? ? ? ? ? ? paste [OPTION]... [File]...
? ? ? ? ? ? ? ? ? ? ? ?| -d ':' 定義分隔符 ? ? ? ? ? ? ??
? ? ? ? ? ? ? ? ? ? ? ?| -s ? ? 把file1的每一行,用 分隔符連接在一起。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 然后第2行,把file2文件的每一行,也用分隔符連接。


如 file1 ? file2 ? ? ? paste -d ':' file1 file2 ? ? ? ? ?paste -d ':' -s file1 file2
? ?1 ? ? ? a ? ? ? ? ? ?1:a ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?1:2:3 ?(file1 的每一行)
? ?2 ? ? ? b ? ? ? ? ? ?2:b ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? a:b ? ?(file2 的每一行)
? ?3 ? ? ? ? ? ? ? ? ? ? 3: ? ? ? ? ? ? ? ? ??
? ? ? ? ? ? ? ? ??


2. join命令 兩個文件中,同一行中,是否有一樣的 文本段?
? ? ? ? ? ? join [-1 POSm -2 POSn] [-a 1 -a 2] ? ? ? ? ? ?[-i] [ -t ':’] ?file1 file2
? ? ? ? ? ? ? ? ? ? [-j POSx ? ? ? ?] ? ? ? ? ? ?[-v 1 -v 2] ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?[-o 1.1,2.1,2.3]
? ? ? ? ? ? 首先[-i] -t':' ? , -i 是文本段 比較忽略大小寫。 -t':'是指文件中的 文本段的分隔符號
? ? ? ? ? ? ?-1 POSm -2 POSn : 用于指定 ?比較flie1每行的 POSm 是否和file2每行的POSn?
? ? ? ? ? ? ?-a 1 ? ? ? ? ? ?: 當有的行 POSm 不等于 POSn時,打印出file1的行
? ? ? ? ? ? ?-a 2 ? ? ? ? ? ?:跟 -a 1一樣,不過是 打印出file2的行
? ? ? ? ? ? ?-v 1 ? ? ? ? ? ?:專門打印出 不匹配行的 file1行
? ? ? ? ? ? ?-v 2 ? ? ? ? ? ?: 專門打印出 不匹配行的 file2行
? ? ? ? ? ? ?-o 1.1 ? ? ? ? ?: 專門定義打印的內容
? ? ? ? ? ? ?
? ? 這個命令用于處理 兩個文件直接的 鏈接。尤其是有公共文本段的。
? ? ? ? ? ??
? ? ? ? ? ??
3. comm [OPTION] ? file1 file2
特別注意: file1 和file2 是 排序后的文件。 ? (--nocheck -order可以不管排序與否) ? ??
用這個命令去比較 文檔,還是不太好用



4. diff命令 ? 其結果所解釋的是: ?如何把file1 轉換成file2。
?一般而言,能使用 beyond compare的情況,盡量使用。因為可視化十分的清晰明了。
?
?diff原理,是按照經典動態規劃的方法,找到文件file1和file2的對比方法。最簡單的得出兩者的異同。
?
?此處我們不追求原理,只分析其 四種輸出狀態: ?-normal -c -u -y


file1 ? ?file2 ? ? ? ? ? ? ? ? ? ? ? ? ? ?直接使用 diff file1 file2 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
?a ? ? ? ? d ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?1,2d0 ? ? ? ? ? ? //刪除file1的 1,2行 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
?c ? ? ? ? a ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?<a ? ? ? ? ? ? ? ?//file1的第一行內容 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
?d ? ? ? ? a ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?<c ? ? ? ? ? ? ? ?//file2的第二行內容 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
?f ? ? ? ? g ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?4c23 ? ? ? ? ? ? ?//修改file1 的第四行,修改file2的第2、3行。 ? ? ??
?g ? ? ? ? h ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?<f ? ? ? ? ? ? ? ?//file1待修改內容 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
? ? ? ? ? ?e ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?--- ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
?h ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?>a ? ? ? ? ? ? ? ?//file2的第2行內容 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? >a ? ? ? ? ? ? ? ?//file2的第3行內容 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 6d4 ? ? ? ? ? ? ? //刪除file1的第六行 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? < ? ? ? ? ? ? ? ? //file第六行的內容,即空白行 ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 7a6 ? ? ? ? ? ? ? //在file1的第七行之后,新增內容,來自file2的第六行
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? >e ? ? ? ? ? ? ? ?//新增的內容是e ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??




如果使用 diff -c file1 file2 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 如果使用 diff -u file1 file2 ? ? ? ? ? ?
*** file1 ? 2017-04-25 13:43:20... ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? --- file1 ? 2017-04-25 13:43:20... ? ? ??
--- file2 ? 2017-04-25 13:44:20... ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? +++ file2 ? 2017-04-25 13:44:20... ? ?
*************** ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?@@ -1,7 +1,6 @@ ? ? ? ? ? ? ? ? ? ? ??
*** 1,7 *** ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? -a ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
-a ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?-c ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
-c ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?d ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
?d ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?-f ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
!f ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?+a ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
?g ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?+a ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
- ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? g ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
?h ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? -h ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
--- 1,6 --- ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?+e ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
?d
!a ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?以上是解釋的是從file1,如何變化成file2的步驟。此時
!a ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?沒有把c轉換成+-,先刪后增
?g
?h
+e?


上半部分是file1的內容,前綴-代表刪除,!代表需修改;
下半部分是file2的內容,前綴+代表file需增加,!代表file1需改成的目標?
?


如果是直接使用 diff -y file1 file2?
a ? ? ? ? ? ? <
c ? ? ? ? ? ? <
d ? ? ? ? ? ? ?d
f ? ? ? ? ? ? |a
? ? ? ? ? ? ? >a
g ? ? ? ? ? ? ?g
? ? ? ? ? ? ? <
h ? ? ? ? ? ? ?h?
? ? ? ? ? ? ? >e
它直接把 file1 和file2列表出來 ?-W 200 可以定義 間隔
用特殊符號表明了兩個文件的區別。


當然我們推薦還是使用beyond compare 去比較文件。 ? ? ? ? ? ? ?


5. patch 命令暫時不管。他使用diff生成的補丁,然后打補丁給file1,使得file1編程file2。


6. tr命令
? ? tr [OPTION]... SET1 [SET2]
? ? ? ? ?| 空 ?把 SET2中,出現的SET1字符,一一對應的替換掉。
? ? ? ? ? ? ? ?適用于字符集 之間的一一轉換。如大小寫轉換
? ? ? ? ?|-d ? tr -d 'abc' file2 ?刪掉file2中,SET1中出現過的字符
? ? ? ? ?|-s ? tr -d 'abc' file2 ?壓縮重復出現的 字符a 、b、c ?如aaaaaabbbdefccc ---> abdefc ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 用于壓縮空格十分有效



7. sed命令
?sed+[OPTION]+編輯指令+文件
? ? ? ? ? ? ? ?|-對象
? ? ? ? ? ? ? ?|-指令
? ? ? ? ? ? ? ? ? ?|- 縮寫
? ? ? ? ? ? ? ? ? ?|- 參數列表


相當于 對文件執行編輯指令;同時呢sed會逐行的進行 編輯,具體的編輯有 替換、剪切、復制等操作。
?因此,編輯指令中,指定對象;需要先是否要逐行? 還是說符合條件的行?
? ? ? 參數列表制定 對象的對象: 即要替換字符,用什么字符替換之類的。
? ? ??
[OPTION]選項,一般用于控制輸出:
? ?| -n : 不用打印 pattern_space的內容,見下面的 sed工作機制
? ?| -i :直接更改原文件


<Sed 流編輯器>
?sed 適用于對文件的批量處理。有兩個參數: (1)該行要不要批量操作?(2) 具體的操作細節。


?語法如下:
?sed ?[參數]... file ? ? ??
? ? ? ?|-- 行對象指定
? ? ? ?|-- 操作細節
? ? ? ?|-- argument


? 行對象指定: (1) 十進制數字: ?5 :就代表對該文件的第5行進行操作。其余不操作
? ? ? ? ? ? ? (2) /regular expression/ :用"//" 雙斜杠 括起來的。匹配上該正則表達式的行進行操作。
? ? ? ? ? ? ? (3) $表示最后一行
? ? ? ? ? ? ? (4) 1~2:表示 1.3.5.7行為制定行
? ? ? ? ? ? ? (5) 1,+2: 表示 1,2,3行
? ? ? ? ? ? ? (6) 1\! 除了第一行外,都匹配
? ? ? ? ? ? ? (3) 10d 代表僅對第10行操作
? ? ? ? ? ? ? ? ? /apple/對含有apple的行進行操作
? ? ? ? ? ? ? ? ? 10,/apple/ 代表從第10行開始,直到含/apple/行 結束。
? ? ? ? ? ? ? ? ? 即 address1[,address2] :無地址:對全部行
? ? ? ? ? ? ? ? 單地址: 僅對該行
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?雙地址: 從addr1開始到addr2結束
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? 操作細節: 前面的行對象制定好之后,具體要對這一行,做什么樣的操作? 刪除增加某個字符?改變位置?
? ? ? ? ? ? 這個就是 "操作細節"所要描述的。
? ? ? ? ? ??
? ? ?|--- 縮寫
? ? ?|--- 具體參數 ? ? ?
? ? ?
? ? ?我們知道,刪除、增加、搬移命令,所需要的 參數信息不盡相同。下面大致介紹常用的操作命令:
? ? ?
? ? ?
? "s" : s/pattern/replacement/ ?使用replacement替換字符pattern?
? ? ? ? ? 很顯然 pattern是regex, 一開始不熟悉的情況下,用精準匹配就行
? ? ? ? ? 進一步思考:?
? ? ? ? ? ? ? ? ? ?(1) 如果想用 enjoy my_holiday 替換 my_holiday.
? ? ? ? ? ? ? ? ? ? ? ?我們當然可以 s/my_holiday/enjoy my_holiday/ ? 我們可以使用 & 替代 my_holiday.
? ? ? ? ? ? ? ? ? ? ? ?簡化下來就是: s/my_holiday/enjoy &/?
? ? ? ? ? ? ? ? ? ?(2) 如果 enjoy your_holiday ,Tom and james. 換成 Tom and james,enjoy your_holiday
? ? ? ? ? ? ? ? ? ? ? ?s/\(enjoy your_holiday\)\(,\)\(Tom and james\)/\3\2\1/?
? ? ? ? ? ? ? ? ? ? ? ?其實還是利用 正則表達式規則: \(...\) 可以用 \n替代 ?
? ? ? ? ? ? ? ? ? ? ?
? "d" :只一個d ?代表 刪除行。
? ? ? ? 即刪除 "行對象指定 的行"?
? ? ? ??
? "a" : a 就是append ? Address1 a "----\n-----" pet.txt
? ? ? ??
? ? ? ? 在Address1下面一行,添加 兩行----?
? ? ? ? 注意 a前面只能跟一個地址參數。 里面如果添加多行,需要\n?
? ? ? ??
? "i" :i就是insert,跟a語法一樣,只不過它是在 Address1前一行插入。
? ? ? ? ? ? ??
? "c" : change. 語法: Addr1 [,Addr2] c “-------”?
? ? ? ? 相當于把 Addr1行到Addr2行,每一行的內容,都替換成------
? ? ? ??
? "p" : addr1 [,addr2] p 額外打印出 指定行的內容
??
? "w" : addr1 [,addr2] w file ?相當于把 指定的行的內容,存入到file中。
??
? "r" : addr r file :相當于 在匹配addr后,把 file內容逐行讀出來輸出。 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
? ? ? ? ? ? ? ? ? ?
? "y" : addr1 [,addr2] ?y/abc/ABC
? ? ? ? 對于 制定行,將其中行內容中所有的 a->A b->B c->C
? ? ? ? 不支持 字符區表示
??
?
? "n" : 見下文
??
? "N" : ?見下文
? ? ? ?
? ? ? ??
? 整個sed命令的 工作機制:
? ??
? ? foreach line {
? ? ? ?pattern_space <= line[i]; ?//把每行讀入 pattern_space
? ? ? ?
? ? ? ?if(pattern_space match ) ?//指定行
? ? ? ?{
? ? ? ? ? pattern_space <= function{d/a/c/s...,pattern_space} //對Pattern_space執行 cmd,然后寫會pattern_space
? ? ? ?}
? ? ? ?
? ? ? ?i++; ? ? ? //行指針增加1
? ? ? ?
? ? ? ?if -n not exit {
? ? ? ? ? print ?pattern_space; ? ?//-n參數 是輸出控制參數。 默認把每個pattern_space 打印至標準輸出
? ? ? ?}
? ? ?}
? ? ? ??
其中 function 里面是 "n"時,它的函數功能是 ?pattern_space <= line[i+1] i=i+1;
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 即把下一行寫入pattern_space內,指針加1.
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 然后再i++,
當 function 里面是"N"時,它的函數功能是 ?pattern_space <= "pattern_space + line[i+1]" i=i+1;
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 即 把源pattern_space和 下一行內容,當作一個整體。寫入pattern_space. 指針加1
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 然后再i++,
? ? ? ? ??
? "q" ?: 退出sed
??
? "#" ?:添加注釋?
??
? "h" ?: 把此時的 pattern_space內部的內容,覆蓋寫入 hold_space內
? "H" ?: 把此時的 pattern_space內部的內容,additon寫到 原hold_space后面 ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? "g" ?: 把hold_space內容,覆蓋寫到pattern_space內
? "G" ?: 把hold_space內容,addition寫到 原pattern_space后面
? "x" ?: 互換 hold_space和pattern_space內容
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?


----arugemnet
? "g" ?: 比如 sed '1,5s/caokang/mokang/g ? :表示從第一行到第五行,每一行的每一個 caokang,都替換成mokang
? "2" ?: 比如 sed '1,5s/caokang/mokang/g ? :表示從第一行到第五行,每一行的 第2個 cokang,替換成mokang
? "2g" : 比如 sed '1,5s/caokang/mokang/g ? :表示從第一行到第五行,從第2個 cokang,開始,均替換成mokang
? "" ? : 比如 sed '1,5s/caokang/mokang/g ? :表示從第一行到第五行,只替換第一個cokang
? "p" ?: 比如 sed '1,5s/caokang/mokang/g ? :表示從第一行到第五行,替換第一個cokang后,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 不再繼續替換,把替換一個caokang后的該行額外輸出在 標準輸出
"w file" ?: 比如 sed '1,5s/caokang/mokang/g ? :表示從第一行到第五行,替換第一個cokang后,?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?不再繼續替換,把替換一個caokang后的 行內容,寫入 file里面。


比較常用的是 "ng"用于指定 替換項






目前,我們如果在命令行中,書寫sed -i ‘s/caokang/mokang/g' test.txt
我們一般為了可讀性,只會 寫一個命令s。
我們可以把 一連串的 命令,寫在一個script里面,然后 sed -f script test.txt ?



<第二十二章 ?格式化輸出>

1. fold命令
? ? ? fold -w 50 ? ? 輸出顯示,位寬是50字符。
? ? ? fold -w 50 -s ?位寬50字符的同時考慮 word的邊界


2. pr : 將較大的文件分割成多個頁面,適合于打印


3 echo 命令

? ?echo [-ne] 字符串

根據shell 工作原理. ?shell命令行自己先提前把 字符串做一遍 元字符擴展. ?所以 字符串里面有特殊意義字符時,需要用""或者‘’保護起來?

-n ? 不要在最后自動換行.(echo命令,會自動的在最后 打印出一個 換行符號)

-e ? 開啟反斜杠\的轉義功能。 ? 我們知道 ?字符串會被shell預先 元字符擴展。

? ? ? ?當字符串不加引號時,反斜杠會提前被 釋義。如果加了雙引號保護,那么shell元字符擴展之后,里面還有反斜杠\、這個時候 使用-e就能啟用 echo 命令 ? ? ?\的轉義功能

轉義如下: ? ? \a :嘟一聲

? ? ? ? ? ? ? ? ? ? ? ? ? ? \\ : 反斜杠

? ? ? ? ? ? ? ? ? ? ? ? ? ? \b :刪除前一個字符

? ? ? ? ? ? ? ? ? ? ? ? ? ? \t ?: ?table字符

? ? ? ? ? ? ? ? ? ? ? ? ? ?\n ?:換行,光標到行首

? ? ? ? ? ? ? ? ? ? ? ? ? ?\f :換行,光標直接下移(不從頭開始) ? ? 如echo -e "aaa\fbbb"

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? aaa

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? bbb



4. printf命令.

? ? ? ? ? ? ?printf ?format-string ?[arguement] ??

printf命令工作機制也是 ? shell命令行先預先 元字符擴展。 同時由于 printf命令 不會自動的換行,所以 ?format 里需要定義換行符\n。

為了防止shell 命令行提前 釋義,所以 format-string一般都用雙引號 括起來。

? ? ? ? ? ? 只有當 "format-string"里面存在 %s %d這類表達式時,arguement才必須存在。

? ? ? ?printf里面常用的 反斜杠轉義,依舊存在. ?于此同時,還有% 定義的特殊格式.


? ? %s 字符串 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??

? ? %.ns 打印字符串前n個字符。 ??printf "%.3s" sdfer ?---> ?sdf

? ? %-10s ?打印10個字節,左對齊

? ? %d 十進制整數

? ? %.5d :十進制數,前面補0 ? ? printf "%.3d" 12 ?---> ? 012

? ? ?%f ?浮點數

? ? ?printf " i am is %s, my age is %d. my high is %.2f “ ?caokang 25 182.21?



? ? ? ? ? ? ? ? ? ?









? ??



版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://808629.com/155180.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 86后生记录生活 Inc. 保留所有权利。

底部版权信息