1.字符串替換
sed -i 's/aaa/bbb/g'
+g :匹配每一行有行首到行尾的所有字符
不加g:匹配每一行的行首開始匹配,匹配到第一個符合的字段,就會結束,跳到下一行
2.sed與awk
sed(關鍵字: 編輯):以行為單位的文本編輯工具,可以分析 standard input
awk(關鍵字:分析&處理) 一行一行的分析處理 awk '條件類型1{動作1}條件類型2{動作2}' filename, awk 也可以讀取來自前一個指令的 standard input
相對於sed常常用於一整行處理, awk則比較傾向於一行當中分成數個"字段"(區域)來處理, 默認的分隔符是空格鍵或tab鍵
如果是按行操作,就統統都用 sed
如果是不僅按行,還要按列操作,就統統都用 awk
比如文件
ab334cd-ccffafsdfbb006
bb00dg-xxxxxx80790
變成
cdab334-ccffafsdfb006b
dgbb00-xxxxx80790x 這里用sed比awk簡單?
1). awk中的for循環
awk -F '' '{for(i=2;i<NF;i++) print $i}'
2). 刪除以某個符號開頭的行
sed -i '/^#/d' filename #刪除空行
sed 's/[[:space:]]//g' #刪除所有空格
sed 's/^[ \t]//g' #刪除行首所有空格和tab
3). vim
非編輯狀態下輸入:g/^$/d #刪除空格行:
非編輯狀態下輸入:%s/^\s*//g #刪除行首空格:
非編輯狀態下輸入:%s/\s*$//g #刪除行尾空格:
\s 是元字符,匹配空白字符,等同於[ \t]
參考:https://www.cnblogs.com/penseur/archive/2011/02/25/1964522.html
習題:
sla-list中有如下內容
jdjdjj iien ['aaa','bbb','ccc']
34dgfd4jj idfaien ['aaaa','bbbb','cccc','dddd']
將[]中的aaa、bbb...提取出來
awk -F [ '{print $2}' sla-list |awk -F , '{for(i=1;i<=NF;i++) print $i}'|sed "s#'##g"|sed 's/]//g'|sed 's/^ //g'
幾個注意點:
1)
NF:Number of Field
NR:Number of Row
2)awk中for循環的使用
3)sed中#的使用
使用#來代替/當分隔符,因此/不再具有轉義功能,無需再加反斜杠來辨識。分隔符對單引號和雙引號作用一樣。
尤其在替換單引號時推薦使用# sed 's#'#hello#g'
sed 's#]#hello#g'
sed 's/\]/hello/g'
3.
將oldboy目錄下的文件更名(oldboy替換成oldgirl)
sed:
for i in `ls oldboy`;do newname=`echo $i|sed 's/boy/girl/g'`;mv oldboy/$i oldboy/$newname;done;
awk:
for i in `ls`;do newfile=`echo $i|awk '{gsub(/oldboy/,"oldgirl");print}'`;mv $i $newfile;done
小技巧:文件名通過echo來顯示並修改
rename:
rename oldgirl oldboy *
4.rename命令
用字符串替換的方式批量改變文件名。
rename main1.c main.c main1.c #rename 原字符串 目標字符串 文件列表
支持通配符
? 可替代單個字符
* 可替代多個字符
[charset] 可替代charset集中的任意單個字符
來自: http://man.linuxde.net/rename
5.
awk '{pattern + action}' {filenames}
awk '/^[ns]/{print $1}' test -----如果記錄以n或s開頭,就打印這個記錄
6.轉換大小寫
typeset -u name='hello';echo $name #變成大寫
typeset -l name='HELLO';echo $name #變成小寫
echo $name|tr '[a-z]' '[A-Z]'
7.切換用戶時出現“su: Authentication failure”
sudo -i
chmod +s /bin/su
sudo -i: 為了頻繁的執行某些只有超級用戶才能執行的權限,而不用每次輸入密碼,可以使用該命令。
提示輸入密碼時該密碼為當前賬戶的密碼。沒有時間限制。執行該命令后提示符變為“#”而不是“$”。
想退回普通賬戶時可以執行“exit”或“logout” 。
s 在文件執行時把進程的屬主或組ID置為該文件的文件屬主。
