繼續shell學習
處理字串的方法
(1)基礎正規表示式(留意編碼)
[:alnum:]——代表英文大小寫字元及數字
[:alpha:]——代表任何英文大小寫字元
[:digit:]——代表數字
[:lower:]——代表小寫字元
[:upper:]——代表大寫字元
grep [-a] [-b] '查詢字元' 檔名
例子:用dmesg列出核心資訊,找出含qxl所在行的前後3行,並且顯示行號
dmesg |grep -n -a3 -b3 'qxl'
-n:顯示行號
-i:不區分大小寫
-a:前3行
-b:後3行
regular_express.txt
語系已調整好
例1:查詢字串
grep -n 'the' regular_express.txt
例2:選擇不含the字串的某行
grep -vn 'the' regular_express.txt
例3:不區分大小寫查詢字串
grep -in 'the' regular_express.txt
例4:同時查詢test和taste兩個關鍵字
思路:擁有共通的't?st'存在,任意擁有'e'或'a'都能被匹配
grep -n 't[ea]st' regular_express.txt
例5:查詢'oo'字元
grep -n 'oo' regular_express.txt
例6:控制'oo'前面無'g'字元
grep -n '[^g]oo' regular_express.txt
例7:控制'oo'前乙個字元不能是小寫英文
grep -n '[^a-z]oo' regular_express.txt
abcd...z在ascll碼是連續的,因此可省略為a-z
例8:行首字元^,匹配出開頭為小寫字元的行
grep -n '^[a-z]' regular_express.txt
例9:不要開頭為英文本元
grep -n '^[^a-za-z]' regular_express.txt
^符號,在字元集合符號之內與之外是不同的。具體如下:
內代表反向選擇
外代表行首符號
例10:匹配'.'結尾的那一行
由於小數點還有其他意思,需先用轉義符解除其他意思
grep -n '\.$' regular_express.txt
例11:匹配空白行
grep -n '^$' regular_express.txt
例12:
檔案:/etc/vsyslog.conf
匹配不要空白行以及#開頭的注釋行
grep -vn '^$' /etc/vsylog.conf |grep -v '^#'
grep -n -v "^$" /opt/data/vsyslog.conf |grep "^[^#]"
.:一定有乙個任意字元
*:重複前乙個字元,0到無窮多次
例1:找出'g??d'字元
grep -n 'g..g' regular_express.txt
例2:找出至少兩個'oo'的一行
grep -n 'ooo*' regular_express.txt
例3:找出g開頭與g結尾,當中字元可有可無
grep -n 'g.*g' regular_express.txt
例4:找出任意數字的行列
連續re字元,表達數字後零個或多個數字的意思,相當於'[0-9]'
grep -n '[0-9][0-9]*' regular_express.txt
例1:找到兩個'oo'
{}中間的數字代表連續多少字元
grep -n 'oo' regular_express.txt
grep -n 'o\' regular_express.txt
例2:g後面接2到5個o,再接g的字串
grep -n 'go\g' regular_express.txt
例3:2個0以上的goo...g
grep -n 'go\g' regular_express.txt
grep -n 'gooo*g' regular_express.txt
管道命令,可以分析標準輸入,還可以將資料進行替換、刪除、新增、選取特定行等功能
sed [-nefr] [操作]
選項與引數:
-n:加上該引數,則只有經過sed特殊處理的那一行才會被列出來
-i:直接修改讀取的檔案內容,而不是由螢幕輸出
慚怍說明:[n1[,n2]]function
n1,n2:代表選擇進行操作的行數
function:
a:新增,a的後面可以接字元,而這些字元會在新的一行出現(目前的下一行)
c:替換,c的後面可以接字元,這些字元可以替換n1,n2之間的行
d:刪除
p:列印,亦即將某個選擇的資料列印出來。通常p會與引數sed -n 一起出現
s:替換,可以直接進行替換的工作,通常這個s的操作可以搭配正規表示式,例如1,20s/old/new/g
例1:將/etc//passwd的內容列出並且列印行號,同時,請將第2~5行刪除
沒有sed -e也可以。
nl /etc/passwd |sed '2,5d'
例2:將將/etc//passwd的內容列出並且列印行號,同時,請將第3行到最後一行刪除
nl /etc/passwd |sed '3,$d'
例3:在第2行後面加入兩行字,例如
nl /etc/passwd |sed '2a drink tea or drink beer?'
--增加兩行以上
nl /etc/passwd |sed '2a drink tea or drink beer? or .....\
drink coffee?'
例4:(以行為單位)將第2~5行的內容替換為『no hb』
nl /etc/passwd |sed '2,5c no hb'
例5:使用sed列出11-20行
nl /etc/passwd |sed -n '11,20p'
重點:
部分資料的查詢並替換功能
/sbin/ifconfig etho |grep 'inet' |sed 's/^.*inet//g' \
|sed 's/netmask.*$//g'
分析:
(1)將開頭有乙個或無窮個字元與inet組成的字元替換為空
(2)將netmask與有乙個或無窮個字元的結尾組成的字元替換為空
擴充套件:利用sed將man所在行內容刪除
cat /etc/man_db.conf |grep man |sed 's/#.*$//g' \
sed '/^$/d'
直接修改檔案內容(重要):sed -i
例1:將regular.txt內每一行結尾若為.則換成!
sed -i 's/\.$/\!/g' regular.txt
例2:在regular.txt結尾加上'i am bb '
sed -i '$a i am bb' regular.txt
awk '條件型別1 條件型別2 ....' filename
例子:首先last -n 5
dmtsai pts/0 192.168.1.100 tue jal 14 17:32 still logging
.
.
.
.
.
.
$0:一行字段
$1:第一行第乙個欄位dmtsai
$n:第一行第n個字段
nf:每一行($0)擁有的字段總數
nr:目前awk所處理的是第幾行資料
fs:目前的分隔符。預設是空格。
例1:列出每一行的賬號,列出目前處理的行數,且說明該行有多少個字段。
last -n 5 |awk ''
{}:表示只有操作1
"\t""lines" => 」\t lines「 (雙引號下仍保留原意,tab的意思)
例2:(帶邏輯運算)檢視第三欄小於10以下的資料,並且僅列出賬號與第三列
cat /etc/passwd |awk ' $3 <10 '
工作總結 2010 3 16
在cuda中,一般的資料複製到的顯示卡記憶體的部分,稱為global memory。這些記憶體時沒有cache 的,而且,訪問global memory所需要的時間 即latency 是非常長的,通常是數百個cycles.如果我們的程式只有乙個thread,所以每次它讀取global memory的...
找工作總結
算一算,從2008年9月份開始找工作,到2009年12月現在已經有3個月了 找工作,算是人生一段特殊的經歷吧,知道了很多公司,認識了很多人,也學習到了很多東西,對這個社會也認識的更清楚了。從一開始的自信,以為很多崗位都是為自己量身打造,卻一次次被bs,讓我很受打擊。特別是幾個好公司的筆試都沒有通過,...
2011工作總結
1 編碼能力 實踐中,開始注重模型的概念。所謂模型打個比方 要做一台電視機,首先搞清楚你想怎麼使用它,目的是讓它看起來更方便易用。根據常規經驗判斷,電器需要電源 需要訊號,這兩點是必不可少。ok,那畫個草圖,電視要顯示,那我給它準備乙個顯示的東西,現實生活中,有以下標準可選 液晶顯示器,投影顯示器 ...