Shell 輸入輸出
Read 用來讀取輸入,並賦值給變量
echo ,printf可以簡單輸出變量。
> file 將輸出重定向到另一個文件
>> 表示追加等價於tee -a
< file 輸入重定向
| 表示管道,也就是前一個命令的輸出傳入下一個命令的輸入
文件描述符
輸入文件—標準輸入0
輸出文件—標準輸出1
錯誤輸出文件—標準錯誤2
使用 2>&1 >/tmp/tmp < /tmp/tmp
管道
把不同程序的輸入和輸出連接
可以連接更多命令
常見的組合命令Linux三劍客
echo hello world | read x; echo $x
echo hello world | while read x;do echo $x;done
grep
基於正則表達式查找滿足條件的行
數據查找定位
grep pattern file
grep -i pattern file 忽略大小寫
grep -v pattern file 不顯示匹配的行
grep -o pattern file 把每個匹配的內容用獨立的行顯示
grep -E pattern file 使用擴展正則表達式
grep -A-B -C pattern file 打印命中數據的上下文
grep pattern -r dir/ 遞歸搜索
pattern正則表達式
基本表達式(BRE)
^ 開頭 $結尾
[a-z] [0-9] 區間
* 0個或多個
基本正則(BRE)與擴展正則的區別(ERE)
? ?貪婪匹配
+ ?個或者多個
() 分組
{} 範圍約束
| 匹配多個表達式的任何一個
curl https://testerhome.com | grep -o 'http://[a-zA-Z0-9\\.\\-]*'
awk
根據定位到的數據行處理其中的分段
awk 'pattern{action}'
awk 'BEGIN{}END{}' 開始和結束
awk '/Running/' 正則匹配
awk '/aa/,/bb/' 區間選擇
awk '$2~/xxx/' 字段匹配
awk 'NR==2' 取第二行
awk 'NR>1' 去掉第一行
awk內置變量
FS 字段分隔符
OFS 輸出數據的字段分隔符
RS 記錄分隔符
ORS 輸出字段的行分隔符
NF 字段數
NR 記錄數
awk的字段數據處理
-F 參數指定字段分隔符
BEGIN{FS="_"} 也可以表示分隔符
$0代表當前的記錄
$1代表第一個字段
$N 代表第N個字段
$NF 代表最後一個字段
把單行分拆為多行
echo $PATH | awk 'BEGIN{RS=":"}{print $0}'
echo $PATH | awk 'BEGIN{RS=":"}{print NR,$0}'
echo $PATH | awk 'BEGIN{RS=":"}END{print NR}'
多行組合為單行
echo $PATH | awk 'BEGIN{RS=":"}{print $0}' | awk
'BEGIN{FS="\\n";ORS=":"}{print $0}'
sed
sed [addr]X[options]
-e 表達式
sed -n '2p' 打印第二行
sed 's#hello#world#' 修改
-i 直接修改源?件
-E 擴展表達式
--debug 調試
echo $PATH | awk 'BEGIN{RS=":"}{print $0}' | sed 's#/
#----#g'
echo $PATH | awk 'BEGIN{RS=":"}{print $0}' | sed -n '/
^\\/bin/,/sbin/p'
sed -i '.bak' -e '' -e ''
閱讀更多 溫焱 的文章