shell 指令使用整理
1.getopts
unix有一個優點就是標準UNIX命令在執行時都具有相同的命令行格式:?
command -options parameters?
如果在執行Shell程序也采用上述格式,Bourne Shell中提供了一條獲取和處理命令行選項的語句,即getopts語句。該語句的格式為:?
getopts option_string variable?
其中option_string中包含一個有效的單字符選項。若getopts命令在命令行中發現了連字符,那么它將用連字符后面的字符同option_string相比較。若有匹配,則把變量variable的值設為該選項。若無匹配,則variable設為?。當getopts發現連字符后面沒有字符,會返回一個非零的狀態值。Shell程序中可以利用getopts的返回值建立一個循環。?
while getopts "rso" arg ; do
case $arg in
r )
rebuild=-r
;;
s )
small=-s
;;
o )
optim=-o
;;
? ) # 不認識
echo error
echo -e $usage
exit 1
;;
esac
done
2.sed?
sed編輯器逐行處理輸入,然后把結果發送到屏幕。
??
-i選項:直接作用源文件,源文件將被修改。
?
sed命令和選項:
?
| a\ | 在當前行后添加一行或多行 |
| c\ | 用新文本替換當前行中的文本 |
| d | 刪除行 |
| i\ | 在當前行之前插入文本 |
| h | 把模式空間的內容復制到暫存緩沖區 |
| H | 把模式空間的內容添加到緩沖區 |
| g | 取出暫存緩沖區的內容,將其復制到模式緩沖區 |
| G | 取出暫存緩沖區的內容,將其追加到模式緩沖區 |
| l | 列出非打印字符 |
| p | 打印行 |
| n | 讀入下一行輸入,并從下一條而不是第一條命令對其處理 |
| q | 結束或退出sed |
| r | 從文件中讀取輸入行 |
| ! | 對所選行以外的行應用所有命令 |
| s | 用一個字符串替換另外一個字符串 |
?
?
?
替換標志:
?
| g | 在行內進行全局替換 |
| p | 打印行 |
| w | 將行寫入文件 |
| x | 交換暫存緩沖區和模式空間的內容 |
| y | 將字符轉換成另外一個字符 |
?
?
sed例子:
?
打印:p命令
?
| sed ‘/abc/p’ file | 打印file中包含abc的行。默認情況sed把所有行都打印到屏幕,如果某行匹配到模式,則把該行另外再打印一遍 |
| sed? -n ‘/abc/p’ file | 和上面一樣,只是去掉了sed的默認行為,只會打印匹配的行 |
?
?
刪除:d命令
?
| sed ‘3,$d’ file??? | 刪除從第3行到最后一行的內容。 |
| sed ‘$d’ file | 刪除最后一行的內容 |
| sed ‘/abc/d’ | 刪除包含abc的行。 |
| sed ‘3d’ file | 刪除第三行的內容 |
?
?
替換:s命令
?
| sed? ‘s/abc/def/g’ file | 把行內的所有abc替換成def,如果沒有g,則只替換行內的第一個abc |
| sed? -n ‘s/abc/def/p’ file | 只打印發生替換的那些行 |
| sed? ‘s/abc/&def/’ file | 在所有的abc后面添加def(&表示匹配的內容) |
| sed? -n ‘s/abc/def/gp’ file | 把所有的abc替換成def,并打印發生替換的那些行 |
| sed? ‘s#abc#def#g’ file | 把所有的abc替換成def,跟在替換s后面的字符就是查找串和? 替換串之間的分割字符,本例中試# |
?
?
指定行的范圍:逗號
?
| sed? -n ‘/abc/,/def/p’ file | 打印模式abc到def的行 |
| sed? -n ‘5/,/def/p’ file | 打印從第五行到包含def行之間的行。 |
| sed /abd/,/def/s/aaa/bbb/g | 修改從模式abc到模式def之間的行,把aaa替換成def |
?
?
多重編輯-e
?
| sed? -e ‘1,3d’ -e ‘s/abc/def/g’ file | 刪除1-3行,然后把其余行的abc替換成def |
?
?
讀文件:r命令
?
| sed? ‘/abc/r newfile’ file | 在包含abc的行后讀入newfile的內容 |
?
?
寫文件:w命令??
?
| sed? ‘/abc/w newfile’ file | 在包含abc的行寫入newfile |
?
?
追加:a命令?????
?
| sed? ‘/abc/a\def’ file | 在包含abc的行后新起一行,寫入def |
?
?
插入:i命令?????
?
| sed? ‘/abc/i\def’ file | 在包含abc的行前新起一行,寫入def |
?
?
修改:c命令???
?
| sed? ‘/abc/c\def’ file | 在包含abc的行替換成def,舊文本被覆蓋 |
?
?
讀取下一行:n命令??
?
| sed? ‘/abc/{n ; s/aaa/bbb/g;}’ file | 讀取包含abc的行的下一行,替換aaa為bbb |
?
?
轉換:y命令???????
?
| sed? ‘y/abc/ABC’ file | 將a替換成A,b替換成B,c替換成C(正則表達式元字符不起作用) |
?
?
退出:q命令???
?
| sed? ‘/abc/{ s/aaa/bbb/ ;q; }’ file | 在某行包含了abc,把aaa替換成bbb,然后退出sed。 |
?
?
暫存和取用:h命令(把模式行存儲到暫存緩沖區)和g(取出暫存緩沖區的行并覆蓋模式緩沖區)G(取出臨時緩沖區的行)命令?
?
h和g是復制行為(覆蓋),H和G表示追加。 ? ?
| sed? -e ‘/abc/h’? -e ‘$G’ file | 包含abc的行通過h命令保存到暫存緩沖區,在第二條命令匯中,sed讀到最后一行$時,G命令從暫存緩沖區中讀取一行,追加到模式緩沖區的后面。即所有包含abc的行的最后一行被復制到文件末尾。 |
| sed -e ‘/abc/{h; d;}’ ????? -e? ‘/def/{g; }’ file | 包含abc的行會移到包含def的行上,并進行覆蓋。 |
?
?
暫存和互換:h和x命令????
?
| sed? -e ‘/abc/h’?? -e ‘/def/x’ file | 包含abc的行會被換成def的行。 |
?
?
?
轉載于:https://www.cnblogs.com/live-in-city/p/3494171.html
總結
以上是生活随笔為你收集整理的shell 指令使用整理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Swing中常用的方法
- 下一篇: c# dynamic 无法创建 泛型变量