版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
基本命令部分
1、查找系統(tǒng)中所有文件長度為0的普通文件,并列出它們的完整路徑:
$find/-typef-size0-execIs-I{}\;
/表示系統(tǒng)所有文件如果空白表示當(dāng)前目錄
f:一般檔案,普通文件
-exec<命令或腳本》{}\對(duì)查詢結(jié)果轉(zhuǎn)給其他命令操作
ls-1列出詳細(xì)信息
2、查找/zsh目錄中更改時(shí)間在7日以前的普通文件,并在刪除之前詢問它們;
$findzsh-typef-mtime+7-okrm{}\;
解釋:-mtimen查找系統(tǒng)最后n*24小時(shí)被改變文件數(shù)據(jù)的文件。
3、myfile.html內(nèi)容如下:
<b>This</b>iswhat<b>I</b>meant.
刪除HTML標(biāo)記,也就是要得到:
ThisiswhatImeant.
catmyfile.htmllsed's/<b>//g;s/<Vb>//g'
解析:s/<b>//g將文件含有<b>的字符轉(zhuǎn)換為空字串,
s/<Vb>//g將文件含有<\b>的字符轉(zhuǎn)換為空字符,'轉(zhuǎn)定義字符,將特殊符號(hào)意義去除。
g表示全局化處理,沒加g的話只會(huì)替換一行里的第?個(gè)<b>然后就替換下-?行了
4、使用tr命令將指定文件的空行刪除
tr-s[^']<filename(轉(zhuǎn)換來自標(biāo)準(zhǔn)輸入的字符)
tr轉(zhuǎn)換字符,例如:將大寫字符轉(zhuǎn)換成小寫字符。選項(xiàng)可以讓你指定所要?jiǎng)h除的字符,
以及將一串重復(fù)出現(xiàn)的字符濃縮成一個(gè)。
-s刪除所有重復(fù)出現(xiàn)字符序列,只保留第一個(gè);即將重復(fù)出現(xiàn)字符串壓縮為一個(gè)字符串。
5、在txt目錄下搜索所有包含有‘the'單詞的.c文件,列出文件名
grep-lr"the"*.c
-1打印匹配模板的文件清單
-r遞歸地搜索目錄。在缺省情況下,按照到目錄的鏈接。
rootghzz-virtual-machine:/home/hzz#grep-r“the"*.cpp
abc.cpp:the;
there;
abode.cpp:the
rootghzz-virtual-machine:/home/hzz#grep-lr“the"*.cpp
6、使用grep將express文件里以數(shù)字開頭的行刪除掠
grep,A[A0-9]*express
A[0-9]代表查找的字符是數(shù)字且放在行首
。匹配一個(gè)不在指定范圍內(nèi)的字符
A[A0-9]代表以不以數(shù)字開頭的行
7、讓電腦10秒鐘后重啟
shutdown-r+10(這是10分鐘)
sleep10;shutdown-rnow
8、在shell執(zhí)行命令時(shí),屏蔽掉錯(cuò)誤信息。
2>/dev/null
2表示錯(cuò)誤的信息,/dev/null垃圾箱,表示把錯(cuò)誤的信息直接輸出到垃圾箱,即刪除
9、解釋命令:trap'echohelloint'INT。
trap是一個(gè)shell內(nèi)建命令,它用來在腳本中指定信號(hào)如何處理。比如,按Ctrl+C會(huì)使
腳本終止執(zhí)行,實(shí)際匕系統(tǒng)發(fā)送了SIGINT信號(hào)給腳本進(jìn)程,SIGINT信號(hào)的默認(rèn)處理方式
就是退出程序。如果要在Ctrl+C不退出程序,那么就得使用trap命令來指定一下SIGINT
的處理方式了。trap命令不僅僅處理Linux信號(hào),還能對(duì)腳本退出(EXIT)、調(diào)試(DEBUG)、
錯(cuò)誤(ERR)、返回(RETURN)等情況指定處理方式。
Trap4111INT表示忽略SIGINT信號(hào),按Ctrl+C不會(huì)退出腳本,輸出"helloint”
通常我們需要忽略的信號(hào)有四個(gè),即:HUP,INT,QUIT,TSTP,也就是信號(hào)1,2,3,24
當(dāng)您運(yùn)行Ctrl+C等中斷時(shí),會(huì)自動(dòng)運(yùn)行echo命令
INT:中斷信號(hào),通常因按下Ctrl+C組合鍵而引發(fā)
10,強(qiáng)制結(jié)束指定進(jìn)程號(hào)的進(jìn)程
kill-9pid
(pid為指定的進(jìn)程號(hào))
11,將某個(gè)文件的屬性更改為只有root可讀寫執(zhí)行。
chownrootfilename
chmod700filename
12.查出系統(tǒng)中所有用戶標(biāo)識(shí)號(hào)大于99的用戶
cat/etc/passwdIawk-F'{if($3>99)print$1}'
13.統(tǒng)計(jì)系統(tǒng)中用戶標(biāo)識(shí)號(hào)大于99的用戶數(shù)
cut-d:-f1,3/etc/passwdIgrep10-9]\{3,\}'Iwc-1
cut命令有5個(gè)參數(shù),其中-c,-b,-f分別表示"character","byte"以及"加Id"截取方式。
當(dāng)采用field模式截取時(shí),需要用“-d”參數(shù)指定一個(gè)分隔符,分割符只能為單個(gè)字符。
cut-d:-f1,3/etc/passwd在/etc/passwd中以“:”為分隔符,取出第1和第3的域
grep10-9]\{3,\},0-9任何一個(gè)數(shù)字重復(fù)三遍
Wc-1統(tǒng)計(jì)文件行數(shù)
(cut-d:-f3/etc/passwdIgrep*[0-9]\{3,\!*Iwc-1也行)
14.按文件大小的降序列出目錄中的所有文件
Is-11sort-nrk5
Is-I|sort-nrk5或Is-1|sort-grk5
-g表示按大小排列
-r表示倒序
-k5表示按第五域排序
-n依照數(shù)值的大小排序。
-nrk5即是按照數(shù)字方式倒序排序,根據(jù)文件屬性的第5列印是文件大小排序
15.將當(dāng)前目錄下的所有文件打包成一個(gè)文件。
tarczvf名字.tar.gz$(ls)
也可以tarczvf名字.tar.gz.(最后面的小數(shù)點(diǎn).表示當(dāng)前目錄)
關(guān)于tar命令:
-c:建立一個(gè)壓縮文件的參數(shù)指令(create的意思);
-Z:是否同時(shí)具有g(shù)zip的屬性?亦即是否需要用gzip壓縮?
-V:壓縮的過程中顯示文件!這個(gè)常用,但不建議用在背景執(zhí)行過程!
-f:使用檔名,請(qǐng)留意,在f之后要立即接檔名喔!不要再加參數(shù)!
16.解釋命令:Inab
In是linux中又一個(gè)非常重要命令,它的功能是為某-一個(gè)文件在另外-個(gè)位置建立一個(gè)同不
的鏈接。
ln-s源文件目標(biāo)文件:為a生成一個(gè)軟連接b,軟連接,不占磁盤空間。
In源文件目標(biāo)文件:為a生成一個(gè)硬連接b,hardlink占磁盤空間。
17.用命令方式將一個(gè)進(jìn)程暫停
kill-STOPpid(pid為進(jìn)程號(hào))
18.解釋命令:find-namehello.c-execIs-1{}\;
查找當(dāng)前目錄中所有的hello.c文件并列出他們的詳細(xì)信息
-rw-r--r--1rootroot72013-06-0501:95./the.c
-rw-r--r--1rootroot72013-06-0501:07.八xt八he.c
(the.c為例)
19.解釋命令:grep-n<A[Aa-zA-ZJ,express
輸出express文件中不以字母開頭的行,-n顯示行號(hào)
20.解釋命令:grep-v'八$'expressIgrep-v'八#'
反向選擇
認(rèn)$':以$結(jié)尾開頭,即表示空行
以為#號(hào)開頭
顯示express中的非空行和非#號(hào)開頭的句子
21.解釋命令:grep-n'o\{2\}‘express
輸出含有兩個(gè)o的句子
22.解釋命令:grep-n<A\(.\).*\1$,express
匹配一行中頭一個(gè)字符跟最后一個(gè)字符相同的行
23.解釋命令:cat-nexpressIsed2;n'
讀一行,刪一行,讀一行,顯示出來是空的;
注意”執(zhí)行n時(shí)會(huì)首先輸出當(dāng)前處理行
24.解釋命令:cat-nexpressIsed-n'p;N'
cat的-n是輸出行號(hào)
sed的-n取消默認(rèn)輸出
p輸出
N追加?行
輸出奇數(shù)行
25.解釋命令:cat-nexpressIsed-n'N;p'
-n取消默認(rèn)輸出
p輸出
N追加一行
偶數(shù)行就全部輸出
奇數(shù)行就最后一行不輸出
26.解釋命令:sed=expressIsed'N;sAn/:/'
=號(hào):打印當(dāng)前的行號(hào)
sed=express的輸出是:
1
“OpenSource*1isagoodmechanismtodevelopprograms.
2
appleismyfavoritefood.
3
Footballgameisnotusefeetonly.
4
thisdressdoesn1tfitme.
5
However,thisdressisabout$3183dollars.
N追加一行
s替換
\n是換行符
sAn/:把換行符換成冒號(hào)
1:"OpenSource"isagoodmechanismtodevelopprograms.
2:appleismyfavoritefood.
3:Footballgameisnotusefeetonly.
4:thisdressdoesn'tfitme.
5:However,thisdressisabout$3183dollars.
27.解釋命令:sed'$!N;/A\(.*\)\n\l$/!P;D'chongfu
P:打印模板塊的第一行
D:刪除模式空間開頭到第一個(gè)\n(含)之間的內(nèi)容,并且控制流跳到腳本的第一條語句
刪除重復(fù)行后輸出
解釋:$!N:如果不是結(jié)尾行,則追加下一行到模板區(qū),在兩者間加Kn。
/A\(.*\)\n\l$/!P:如果本行跟模板空間中的內(nèi)容相同。
注意:執(zhí)行D命令之后,模板塊內(nèi)不添加下一筆數(shù)據(jù),而將剩下的數(shù)據(jù)重新執(zhí)行
sedscript,也就是直接再次執(zhí)行N命令,讀入下一行,然后刪除第一行。一直這樣循環(huán),
直到最后一行,打印輸出模板塊中的內(nèi)容,也就是最后一行的內(nèi)容
28.解釋命令:sed-e'1!G;h;$!d'express
-e表示允許多次修改
!:表示后面的命令對(duì)所有沒有被選定的行發(fā)生作用。(非)
G:獲得內(nèi)存緩沖區(qū)的內(nèi)容,并追加到當(dāng)前模板塊文本的后面。
h:拷貝模板塊的內(nèi)容到內(nèi)存中的緩沖區(qū)。(覆蓋)
d:從模板塊位置刪除行。(刪除整個(gè)模板快)
文件倒著輸出
29.解釋命令:echo"WeLoveChinaUnix"lsed-e'H;sA(..\).*Al/;x;s/.*\(.\{9\}\)$Al/;x;G;sAn//'
H:追加模板塊的內(nèi)容到內(nèi)存中的緩沖區(qū)。
s:替換
x表示互換模板塊中的文本和緩沖區(qū)中的文本。
G:獲得內(nèi)存緩沖區(qū)的內(nèi)容,并追加到當(dāng)前模板塊文本的后面。
\n是換行符
sA(..\).*Al/;前兩個(gè)字符
s/.*\(.\{9\}\)$Al/;后九個(gè)字符
sAn//;換行符替換成空格
所以輸出WeChinaUnix
二:分別使用sed和awk實(shí)現(xiàn)下面的功能(使用express文件)
30.在每一一行后面增加?一空行
sedGexpress
G:獲得內(nèi)存緩沖區(qū)的內(nèi)容,并追加到當(dāng)前模板塊文本的后面。(此時(shí)緩沖區(qū)是空白行)
awk'{print$0express
31.設(shè)置文本中每一行后面有且只有一空行。
sed7A$/d;G'express
/A$/d;表示遇到空行就刪除
G:獲得內(nèi)存緩沖區(qū)的內(nèi)容,并追加到當(dāng)前模板塊文本的后面。(此時(shí)緩沖區(qū)是空白行)
awk'!/A$/{printf("%s\n\n",$O)}'express
!八$/表示不是空行
printf("%s\n\n",$O)輸出正行數(shù)據(jù)并兩個(gè)換行符,即一個(gè)空行
32.在每行后面增加2行空行
sed7A$/d;G;G'express
awk'!/A$/(printf("%s\n\n\n",$O)}'express
33.刪除所有偶數(shù)行
sed'n;d'express
sed'n;d'執(zhí)行n時(shí)會(huì)首先輸出當(dāng)前處理行,然后讀取下?行,并使用d命令刪除。
awk'{tf(NR%2!=0)print$0}'express
34.在匹配The的行前插入空行
sed'/The/{x;p;xj,express
awk'if(/The/)printf(t7n%s/n,\$0);elseprint$0'express
35.輸出行號(hào),行號(hào)和正文間加冒號(hào)
sed=expressIsed*N;sAn/:/'
sed相關(guān)命令參數(shù):
N:追加下一個(gè)輸入行到模式空間后面并在二者間嵌入一個(gè)“\n",改變當(dāng)前行號(hào)碼。
二:打印當(dāng)前行號(hào)
awk'{printf("%d:%s\n”,NR,$0)}‘express
%d:1進(jìn)制有符號(hào)整數(shù)
NR:行號(hào)
36.對(duì)文件中的所有非空行編號(hào)
sed'/./='express|sedV./NisAn/:71
N:追加下一個(gè)輸入行列模式空間后面并在二者間嵌入一個(gè),改變當(dāng)前行號(hào)碼.
■:打印當(dāng)前行號(hào)
,匹配一個(gè)共換行符的字符
沙一,表示第一個(gè)字符是非換行字符的輸出行號(hào),sedV7N;sAn/T中N讀取下一行(行的內(nèi)容)
并在兩行之間插入\n,然后再使用“re/string把小替換成“:”
awk'{if(/./)print£("%d:%s\n",NR,$O);elseprintSO}'express
NR:表示awk開始執(zhí)行超序后所讀取的數(shù)據(jù)行數(shù)
printt("%d:%s'.n",NR,SO)輸出,格式為:十進(jìn)制布■符號(hào)整數(shù)>當(dāng)前處理的行所包含的字符中
整個(gè)語句表示:如果不是空行,則調(diào)用printf函數(shù)以“數(shù)字t字符申+換行”的形式輸出當(dāng)
前處理行號(hào)了蜓行內(nèi)容,否則,直接輸出當(dāng)前處理的挖行內(nèi)容.
37.計(jì)算行號(hào)(模擬“wc-1”)
sed-n'$='express
關(guān)于WC命令:
wc就是wordcount(數(shù)字?jǐn)?shù))的縮寫,通常利用Linux的wc命令和其他命令結(jié)合來計(jì)算行
和其他信息。在Linux下用wc進(jìn)行計(jì)數(shù)。返回文件的行數(shù)、字?jǐn)?shù)、字節(jié)數(shù)等。
wc-mfilename:顯示一個(gè)文件的字符數(shù)
wc-1filename:顯示一,個(gè)文件的行數(shù)
wc-Lfilename:顯示一個(gè)文件中的最長行的長度
wc-wfilename:顯示一個(gè)文件的字?jǐn)?shù)
sed相關(guān)的命令參數(shù):
-n,-quiet,—silent
安靜模式,取消默認(rèn)輸出。
$:錨定行的結(jié)束如:/sed$/匹配所有以sed結(jié)尾的行。
=:打印當(dāng)前行號(hào)
相關(guān)解釋:
$=表示打印最后?行的行號(hào),-n表示安靜模式,不會(huì)輸出其他行的相關(guān)內(nèi)容
awk'END{printNR}'express
awk相關(guān)的知識(shí)點(diǎn):
BEGIN和END
在awk中兩個(gè)特別的表達(dá)式,BEGIN和END,這兩者都可用于pattern中,提供BEGIN和
END的作用是給程序賦予初始狀態(tài)和在程序結(jié)束之后執(zhí)行一些掃尾的工作。任何在BEGIN
之后列出的操作(在{}內(nèi))將在awk開始掃描輸入之前執(zhí)行,而END之后列出的操作將在
掃描完全部的輸入之后執(zhí)行。因此,通常使用BEGIN來顯示變量和預(yù)置(初始化)變量,
使用END來輸出最終結(jié)果。
所以awkEND{printNR},也就是在讀取到最后一行之后,才輸出對(duì)于的行號(hào),也就是輸出
該文件的行數(shù)。
38.模擬dos2unix
實(shí)現(xiàn)dos2unix的關(guān)鍵就是把dos中多余的\r去掉。
sed'sAr//g'expressdos>expressdosl
模擬unix2dos:
sed*s/$Ar/'expressdos>expressdos1
或
sed's/$AxOd/'expressdos>expressdos1
awk'gsub(Ar/,""){print$0}'express>express?
gsub(r,s,t):在字符串t中用字符串s和正則表達(dá)式r匹配的所有字符串替換。返回值是
替換的個(gè)數(shù)。如果沒有給出t,默認(rèn)是$0
相關(guān)解釋:
使用gsub把上替換成然后再輸出當(dāng)前處理的整行字符串
39.將所有g(shù)ood改為bad并打印且只打印該行
sed-n*s/good/bad/gp'express
awk'gsub("good","bad"){print$0)'express
40.將包含is的行的good改為bad并打印且只打印該行
sed-n7is/{/good/{s/good/bad/g;p}}'express
-n:安靜模式,取消默認(rèn)輸出。
g:表示行內(nèi)全面替換,當(dāng)前處理行進(jìn)行全局替換。
-n使用安靜模式,/is/匹配包含is的行,/good/匹配包含is的行中包含good的行,s/good/bad/g,
把改行所有的good都替換成bad,然后使用p輸出該行。
awk'{if($0~/is/&&$0~/good/){gsubCgood'/'bad");print$0}}'express
$0~/is/表示使用第0個(gè)域匹配/is/正則表達(dá)式,第0個(gè)域保存的即是當(dāng)前處理的整行數(shù)據(jù)。
($0-/is/&&$0~/good/)就是如果當(dāng)前處理的整行同時(shí)包含is和good的話就執(zhí)行if里面的語
句。if里面的語句使用gsub把匹配的good替換成bad,然后輸出當(dāng)前行。
41.將不包含is的行的good改為bad并打印且只打印該行
sed-n7is/!{/good/{s/good/bad/g;p}}'express
awk'{if($0!~/is/&&$0~/good/){gsub(/good/,"bad");print$0}}'express
42.顯示文件中的前10行(模擬“head”)
sed10qexpress
q表示退出sed,lOq表示處理到第10行的時(shí)候退出?sed?
awk'{if(NR<11)print$0}'express
NR:表示awk開始執(zhí)行程序后所讀取的數(shù)據(jù)行數(shù)
43.在每5行后增加一空白行
sed'n;n;n;n;G'express
n:讀取下一個(gè)輸入行,用下一個(gè)命令處理新的行而不是用第個(gè)命令。
G:獲得內(nèi)存緩沖區(qū)(holdspace)的內(nèi)容,并追加到當(dāng)前模式空間文本的后面。
n;n;n;n;G的執(zhí)行4個(gè)n命令讀取下一行,每次讀取之前都先輸出當(dāng)前的處理行。然后
把holdspace(這時(shí)為空)中的內(nèi)容追加到模式空間的后面,相當(dāng)于增加一空白行。
awk'{if(NR%5!=0)print$0;elseprintf("%s\n\n",$O)}'express
44.倒置所有行,第一行成為最后一行,依次類推(模擬“tac”)
關(guān)于tac命令:
把文件內(nèi)容反過來顯示,文件內(nèi)容的最后一行先顯示,第一行最后顯示。
sed'l!G;h;$!d'express
G:獲得內(nèi)存緩沖區(qū)的內(nèi)容,并追加到當(dāng)前模板塊文本的后面。
h:拷貝模板塊的內(nèi)容到內(nèi)存中的緩沖區(qū)。
d:從模板塊(Patternspace)位置刪除行。
!:表示后面的命令對(duì)所有沒有被選定的行發(fā)生作用。
$:錨定行的結(jié)束如:/sed$/匹配所有以sed結(jié)尾的行。這里表示文件最后一行。
1:表示文件第一行
第一行的時(shí)候
1!G:在處理第一行的時(shí)候不把緩沖內(nèi)容添加到當(dāng)前處理行的末尾(因?yàn)槟闾幚淼谝恍?/p>
的時(shí)候,緩沖還為空呢)
h:這個(gè)時(shí)候把第一行的內(nèi)容(1)放到緩沖區(qū)
$!d:因?yàn)椴皇亲詈笠恍?,所以刪除,不打印出來
第二行的時(shí)候
1!G:此時(shí)1!G成立,把上一次保存的緩沖區(qū)內(nèi)容(1)放到當(dāng)前行(2)的末尾,第二行變成
了(21)
h:這個(gè)時(shí)候把第二行的內(nèi)容(21)放到緩沖區(qū)
$!d:因?yàn)椴皇亲詈?行,所以刪除,不打印出來
第三行的時(shí)候
1!G:因?yàn)槭堑谌校?!G成立,則把上一次(第二行)保存的緩沖區(qū)內(nèi)容(21)放到當(dāng)
前行(3)的末尾,第二行變成了(321)
h:這個(gè)時(shí)候把第三行的內(nèi)容(321)放到緩沖區(qū)
$!d:因?yàn)椴皇亲詈笠恍?,所以刪除,不打印出來
這樣直到處理到最后一行的時(shí)候:
l!G:此時(shí)1!G成立,把上(n-1)一次保存的緩沖區(qū)內(nèi)容Qn-ir-321)放到當(dāng)前行(n)的末尾,
該行變成了(n…321)
h:這個(gè)時(shí)候把第n行的內(nèi)容(n…321)放到緩沖區(qū)
$!d:因?yàn)槭亲詈笠恍?所以不刪除,打印出第六行內(nèi)容nfn-l]-321
awk'{A[i++]=$O[END{for(j=i-1;j>=O;j")printA[j]|'express
BEGIN和END
在awk中兩個(gè)特別的表達(dá)式,BEGIN和END,這兩者都可用于pattern中,提供BEGIN
和END的作用是給程序賦予初始狀態(tài)和在程序結(jié)束之后執(zhí)行一些掃尾的工作。任何在
BEGIN之后列出的操作(在{}內(nèi))將在awk開始掃描輸入之前執(zhí)行,而END之后列出的操
作將在掃描完全部的輸入之后執(zhí)行。因此,通常使用BEGIN來顯示變量和預(yù)置(初始化)
變量,使用END來輸出最終結(jié)果。
首先輸入每行字都執(zhí)行A[i++J=$O,即是把所有行的內(nèi)容保存到A[i]數(shù)組中。直到處理
完所有的行之后,繼續(xù)質(zhì)詢END中的內(nèi)容:for(j=i-l;j>=0;j-)printAfj],這里是吧A[i]中的
元素倒序輸出,即是倒置所有的行。
45.顯示文件中的最后10行(模擬“tail”)
sed方法:
sed-e:a-e'$q;N;11,$D;ba'express
sed方法相關(guān)命令參數(shù):
-e
直接在指令列模式上進(jìn)行sed的動(dòng)作編輯,允許多臺(tái)編輯。
:a
表示建立-一個(gè)標(biāo)簽a
b
跳轉(zhuǎn)命令,這個(gè)命令是無條件跳轉(zhuǎn)
ba表示跳轉(zhuǎn)到標(biāo)簽a處
q
退出Sed。
N
追加下一個(gè)輸入行到模板塊后面并在二者間嵌入一個(gè)“\n",改變當(dāng)前行號(hào)碼。
D
刪除模板塊的第一行。
11
表示文件第十一行
相關(guān)解釋9:
首先創(chuàng)建一個(gè)a標(biāo)簽,然后不斷執(zhí)行這段代碼:$q;N;ll,$D;ba,如果是最后一行則退出
sed,否則繼續(xù)循環(huán),N讀取下一行,讀取模式空間的第11行,如果是最后行則刪除模式
空間的第一行,繼續(xù)跳到標(biāo)簽a處執(zhí)行。
awk方法:
awk'{a[i++1=$0)END{if(i>10)for(j=i-10;j<i;j++)printa[j];elsefor(j=O;j<i;j++)printa[j]}'
express
相關(guān)解釋:
使用{a[i++]=$0}把每行字符串賦給a[i]數(shù)組,然后判斷數(shù)組大小是不是大于10if(i>10),
如果是則輸入最后10個(gè)元素,否則直接輸出所有的元素。
46.顯示文件中的最后2行(模擬“tail-2”命令)
關(guān)于tail命令:
tail[-r][-nNumber][File]
tail命令從指定點(diǎn)開始將File參數(shù)指定的文件寫到標(biāo)準(zhǔn)輸出。如果沒有指定文件,則
會(huì)使用標(biāo)準(zhǔn)輸入。Number變量
指定將多少單元寫入標(biāo)準(zhǔn)輸出。Number變量的值可以是正的或負(fù)的整數(shù)。如果值的
前面有+(加號(hào)),從文件開頭
指定的單元數(shù)開始將文件寫到標(biāo)準(zhǔn)輸出。如果值的前面有-(減號(hào)),則從文件末尾指
定的單元數(shù)開始將文件寫到
標(biāo)準(zhǔn)輸出。如果值前面沒有+(加號(hào))或-(減號(hào)),那么從文件末尾指定的單元號(hào)開
始讀取文件。
tail-2即是輸出最后兩行。
sed方法:
sed'$!N;$!D'express
sed相關(guān)命令參數(shù):
!
表示后面的命令對(duì)所有沒有被選定的行發(fā)生作用。
N
追加下一個(gè)輸入行到模板塊后面并在二者間嵌入一個(gè)“\n",改變當(dāng)前行號(hào)碼。
D
刪除模板塊的第?行。
相關(guān)解釋:
$!表示如果不是最后一行則執(zhí)行N命令追加下一行,$!D表示如果不是最后行則刪除
第一行。注意:執(zhí)行D命令之后,patternspace內(nèi)不添加下一筆數(shù)據(jù),而將剩下的數(shù)據(jù)重新
執(zhí)行sedscript?也就是直接再次執(zhí)行$!N命令,讀入下一行。知道最后一行忖就不執(zhí)行D
刪除命令,此時(shí)pattenspace中有最后兩行數(shù)據(jù)。
awk方法:
awk'{a[i++]=$O}END{if(i>2)for(j=i-2;j<i;j++)printa[j];elsefor(j=O;j<i;j++)printa[j])'
express
相關(guān)解釋:
a[i++]=$0命令保存所有行到a[i]數(shù)組中。處理完所有語句之后執(zhí)行END里的內(nèi)容。然
后分兩種情況輸出:超過兩條語句的使用a[i]數(shù)組輸出最后兩行,沒有超過兩句的,直接使
用a[i]輸出。
47.顯示文件中的最后?行(模擬“tail-1”)
sed'N;D'express
注意:執(zhí)行D命令之后,patternspace內(nèi)不添加下一筆數(shù)據(jù),而將剩下的數(shù)據(jù)重新執(zhí)行
sedscript,也就是直接再次執(zhí)行N命令,讀入下一行,然后刪除第?行。一直這樣循環(huán),
直到最后一行,打印輸出pattenspace中的內(nèi)容,也就是最后一行的內(nèi)容
48.顯示第9行
sed-n'9p'express
awk'{if(NR==9)print$0}'express
49.顯示包含50個(gè)或以上一字符的行
sed-n7A.\{50,\}$/p'express
'/A\{50,\}$/p1表示匹配以非換行字符開始的50個(gè)以上的字符的行,然后使用p命令
輸出。
awk'{if(length($0)>=50)print$0}'express
50.顯示部分文本——從包含apple的行開始到最后一行結(jié)束
sed-n7apple/,$p'express
awkBEGIN{p=l}{if($0?/apple/IIp==0){p=0;print$0}}'express
51.顯示通篇文檔,除了從包含apple的行到包含google的行
sed7apple/ygoogle/drexpress
/apple/,/google/d表示匹配從包含apple的行到包含google的行,然后使用d全部刪除。
awk'BEGIN{p=l}{if($0!-/apple/&&p==l)print$0;elsep=O;if($0?/google/)p=l;}'
express
首先在BEGIN中給p賦初值1,然后依次處理每一條語句。如果沒有匹配到apple并且
p==l,則輸出改行;否則p=0,直到匹配到google為止,才讓p=L繼續(xù)輸出
三shell部分
52.編寫一個(gè)名為nf的程序,顯示當(dāng)前目錄中的文件數(shù)。鍵入程序并測(cè)試。
IsIawk4{files++}END{printfiles}'
53.編寫一個(gè)名為whos的程序,顯示排好序的已登錄用戶清單。只顯示用戶名,不要有其他
信息。鍵入程序并測(cè)試。
whoIsort-nrklIawk'{print$1}'
-n按照數(shù)字方式排序。
-r顛倒指定排序的順序。
-k作用是根據(jù)某個(gè)列來排序,默認(rèn)是第1列(從1開始)。
54.在終端上顯示
?<echo$x?>displaysthevalueofx,whichis$x
顯示的時(shí)候,第2個(gè)$*的值應(yīng)該被替換,比如如果x=3,顯示:
?<echo$x?>displaysthevalueofx,whichis3
X=3
echo"?<echo\$x?>displaysthevalueofx,whichis$x"
55.依次執(zhí)行下面三條命令,分析結(jié)果。
filename=/home/zsh/express
filename=$(echoSfilenameItr"$(echoSfilenameIcut-cl),,“八")
echofilename
如果是echoSfilename則輸出結(jié)果:AhomeAzshAexpress
但是這里filename只是一個(gè)字符串,所以echofilename就只是輸出filename這個(gè)字符
串
-cl表示取出第一個(gè)字符
$(echoSfilenameIcut-cl)表示取文件名的第一個(gè)字符的值,即
tr"$(echoSfilenameIcut-cl)"表示把每一個(gè)都替換成"”
shell編程里的$(…)結(jié)構(gòu)是什么作用,舉例說明。
作用:一個(gè)命令的標(biāo)準(zhǔn)輸出插在一個(gè)命令行中任何位置
例如:上例中$(echo$filename|cut-cl)
56.編寫一腳本,打印出所有的參數(shù)。
#!/bin/sh
echotheyare$*
exit0
$?竹遞給shellscript的參數(shù)
#!/bin/sh是指此腳本使用Zbin/sh來解釋執(zhí)行,#!是特殊的表示符,其后面跟的是解釋
此腳本的shell的路徑)如果沒有聲明,則腳本將在默認(rèn)的shell中執(zhí)行,默認(rèn)shell是由用
戶所在的系統(tǒng)定義為執(zhí)行shell腳本的shell.
57.編寫一個(gè)腳本,統(tǒng)計(jì)參數(shù)的總數(shù)。
#!/bin/sh
echo"$#"
exit0
$#表示代遞給shellscript的參數(shù)個(gè)數(shù)
58.編寫一個(gè)腳本,判斷指定的文件是否存在
if[!-e"$1"];then
echo"$1donotexist”
fi
-e當(dāng)指定的文件或目錄存在時(shí)返回真
#!/bin/sh
if[!-e"$1"];then
echo"$1donotexist"
else
echo"$1isexisted"
fi
exit0
-e當(dāng)指定的文件或目錄存在時(shí)返回真
60.編寫一個(gè)名為rename的程序,給第1個(gè)參數(shù)所給定的文件更名,在原名后添加第2個(gè)
參數(shù)包含的一串字符。即
renamememol.sv
應(yīng)該將文件memol更名為memol.sv
創(chuàng)建一個(gè)rename的文件,在里面編寫:
mv$1$1$2
mv$l$1$2,中$1對(duì)應(yīng)第一個(gè)參數(shù),$2對(duì)應(yīng)第二個(gè)參數(shù),即是把$1對(duì)應(yīng)的文件名更改
為由$1$2組成的文件名
61.編寫一個(gè)名為unrename的程序,從第1個(gè)參數(shù)指定的文件名的后部去掉第2個(gè)參數(shù)包含
的字符串,即
unrenamememol.sv.sv
應(yīng)該把文件memoLsv更名為memol。要保證從尾部去掉字符串,如
unrenametestltesttest
應(yīng)該將tesltest更名為testl(提示:用sed和命令替換)
mv$1$(echo$1Isedns/$2$//")
$2$表示匹配第二個(gè)域的內(nèi)容直到結(jié)尾的
62.編寫一個(gè)shell腳本,使用循環(huán)語句將當(dāng)前目錄下的.c文件更名為.cpp.
解決方法:
forloopin$(ls)
do
ifechoH$loopuIgrep-q'c'
then
mv$loop$(echoSloopIsed"sA.c$A.cpp/")
fi
done
關(guān)于shell腳本的for循環(huán)語句格式:
for循環(huán)語句格式如下:
for變量名in取值列表
do
命令列表
done
相關(guān)解釋:
forloopin$(ls)表示變量loop從Is命令得到的列表中取值。
ifecho"Sloop"Igrep-q'c'中-q或--quiet或-silent表示不顯示任何信息。整句表示判斷
是否找到以.c結(jié)尾的文件,找到則執(zhí)行then里面的語句。
mvSloop$(echo$looplsed"s/\.c$/\.cpp/")表示把.c換成.cpp
63.source命令和exec命令有啥區(qū)別?舉例說明。
exec和source都屬于bash內(nèi)部命令(builtinscommands),在bash下輸入manexec或
mansource可以查看所有的內(nèi)部命令信息。
shell的內(nèi)建命令exec將并不啟動(dòng)新的shell,而是用要被執(zhí)行命令替換當(dāng)前的shell進(jìn)程,
并且將老進(jìn)程的環(huán)境清理掉,而且exec命令后的其它命令將不再執(zhí)行
source命令或者不會(huì)為腳本新建shell,而只是將腳本包含的命令在當(dāng)前shell執(zhí)行。
不過,要注意一個(gè)例外,當(dāng)exec命令來對(duì)文件描述符操作的時(shí)候,就不會(huì)替換shell,
而且操作完成后,還會(huì)繼續(xù)執(zhí)行接下來的命令。
shell的內(nèi)建命令exec將并不啟動(dòng)新的shell,而是用要被執(zhí)行命令替換當(dāng)前的shell進(jìn)程,
并且將老進(jìn)程的環(huán)境清理掉,而且exec命令后的其它命令將不再執(zhí)行。
因此,如果你在一個(gè)shell里面,執(zhí)行execIs那么,當(dāng)列出了當(dāng)前目錄后,這個(gè)shell
就自己退出了,因?yàn)檫@個(gè)shell進(jìn)程已被替換為僅僅執(zhí)行1s命令的一個(gè)進(jìn)程,執(zhí)行結(jié)束自然
也就退出了。為了避免這個(gè)影響我們的使用,一般將exec命令放到一個(gè)shell腳本里面,
用主腳本調(diào)用這個(gè)腳本,調(diào)用點(diǎn)處可以用bashash,(a.sh就是存放該命令的腳本),這樣會(huì)
為a.sh建立一個(gè)subshell去執(zhí)行,當(dāng)執(zhí)行到exec后,該子腳本進(jìn)程就被替換成了相應(yīng)的exec
的命令。
source命令或者”.”,不會(huì)為腳本新建shell,而只是將腳本包含的命令在當(dāng)前shell執(zhí)行。
解釋下面的shell腳本
64:
#!/bin/sh
rm-ffred
if[-ffred];then
else
echofilefreddoesnotexist
fi
exit0
51:
#Wbin/sh
rm?ffred強(qiáng)制刪除ired
if[-ffred];then咒斷tred是否是普逋文件
else
echotilefreddoesnotexist
fi
exit0
65:
#!/bin/sh
echoThedateis$(date)
set$(date)
echoThemonthis$2
exit0
#!/bin?'sh
echoThedateis$(date)輸出時(shí)間
set$(date)設(shè)置時(shí)間
echoThemonthis$2輸出第二個(gè)參數(shù)
exit0
66:
#!/bin/sh
while[,,$ln!='M,];do
echo"$1”
shift
done
exit0
#l/bin7sh
while[ff$r!-];do
echon$r輸出所有的多數(shù)
shin把位苴參數(shù)左移
done
exit0
67:
#!/bin/bash
#WriteashellscriptthatcountsEnglishlanguagearticles(a,an,the)
#inagiventextfile.
#
#
#ThisisafreeshellscriptunderGNUGPLversion2.0orabove
#Copyright(C)2005nixCraftproject.
#Feedback/comment/suggestions:/fb/
#
#ThisscriptispartofnixCraftshellscriptcollection(NSSC)
#Visit/formoreinformation.
#
echo-n"Enterafilename:"〃參數(shù)-n的作用是不換行,echo默認(rèn)是換行
readfile〃從健盤輸入.read命令接收標(biāo)準(zhǔn)輸入(鍵盤)的輸入,或其他文件描述符的輸入
a=0
the=0
an=0
#makesurefileexist
if[!-f$file]//-ffilename如果行l(wèi)ename為常規(guī)文件,則為真
then
echon$filenotafile!*'
exit1〃exit(l)表示異常退出
fi
#putwhilelooptoreada$file
whilereadline〃讀取文件$file每行直至文件尾結(jié)束
do
#processeachword
forwin$line〃變量w$line取值空間
do
#convertwordtolowercase;sothatwecancountThE,THE,the,THeetcall
lword=',$(echo$wItr1A-Z]*,[a-z],)H〃把每個(gè)字符都轉(zhuǎn)成小寫
#isit'a1article?
[[$lword=uan]]&&((a++))II[[$lword="the"]]&&((由e++))11[[$lword="an"]]
&&((an++))〃統(tǒng)計(jì)athean的數(shù)量,分別保存在a,the和an中
done
done<$file
#displaystats〃輸出
echo”aarticleoccured$atimes'*
echouthearticleoccured$thetimes"
echo"anarticleoccured$antimes'1
whilereadline
do
echoSline
done<A
(碼在最后相當(dāng)于給整個(gè)whiledo語句加了一個(gè)約束條件.讀取文件A里每行至文件尾結(jié)束
68:
#!/bin/bash
#同步某個(gè)文件夾,使目的文件夾的內(nèi)容和源文件夾的內(nèi)容保持?致,如果源文件夾的某個(gè)
文件作了更新,就將其拷貝進(jìn)目的文件夾,如果源文件夾的某個(gè)文件已經(jīng)刪除,也將目的文
件夾中相應(yīng)的文件刪除。
sync()
(
#檢查使用方法是否正確
if[$#-ne2J〃$#表示提供到shell腳本或者函數(shù)的參數(shù)總數(shù),-ne表示不等于
then
echonusage:./syncsrcdstn
fi
#檢查源文件夾是否存在
ifl!-e$lJ//-e$l第一個(gè)參數(shù)所指的文件夾存在!非
then
echo"error:srcdon'texist'1
exit1
fi
#檢查目的文件夾是否存在,如果不在,復(fù)制整個(gè)文件夾
if[!-e$2]
then
echo"cp-a$1$2”
cp-a$1$2//-a相當(dāng)于-pdr,-p保留源文件或目錄的屬性,-d若來源文件
〃為連結(jié)文件的屬性(linkfile),則復(fù)制連結(jié)文件屬性而非檔案本身,-r遞歸處理,將指定目
〃錄下的文件與子目錄一并處理
return0
fi
#刪掉目的文件夾多出的文件。
forLoopin$(ls$2)
do
if[!-en$l/$Loop"]//如果不存在這個(gè)文件$l/$Loop
then
echo"rm-fr$2/$Loop"
rm-frn$2/$Loopu//-f強(qiáng)制-r遞歸刪除目錄和內(nèi)容
fi
done
#循環(huán)處理當(dāng)前源文件目錄下的每個(gè)文件。
forLoopin$(ls$1)
do
#如果某個(gè)源文件對(duì)應(yīng)的目的文件不存在,拷貝進(jìn)目的文件夾。
if[!-e$2/$Loop]〃如果不存在這個(gè)文件$2/$Loop
then
echo"cploop$l/$Loop$2/$Loop"
cp-a$l/$Loop$2/$Loop〃復(fù)制一份$l/$Loop到$2/$Loop
Continue〃進(jìn)行下次循環(huán),即繼續(xù)找有沒有這種文件
fi
#如果不是目錄,是文件,檢查是否更新,如果有,將其拷貝進(jìn)口的文件。
if[-f$l/$LoopJ//-ffilename如果filename為常規(guī)文件,則為真
then
#timel表示源文件的修改時(shí)間,time2表示目的文件的修改時(shí)間,如果time1大于time2,表
示原文件被更新了。
//stat顯示文件的詳細(xì)信息
//grep-i不區(qū)分大小寫
//cut-c:以字符為單位進(jìn)行分割,9?12表示第9個(gè)字符到第12個(gè)字符
//-gt:大于
timel=$(stat$l/$LoopIgrep-i'modify'Icut
9-12,14,15,17,18,20,21,23,24,26,27)
time2=$(stat$2/$LoopIgrep-i'modify'Icut
9-12,14,15,17,18,20,21,23,24,26,27)
if[$timel-gt$time2]//-gt:大于
then
echoucp$l/$Loop$2/$Loop"
cp$l/$Loop$2/$Loop
fi
continue
fi
#如果是目錄,遞歸調(diào)用sync函數(shù)處理。
if[-d$l/$Loop]//-d如果為目錄,則為真
then
sync$l/$Loop$2/$Loop//sync()函數(shù)
fi
done
)
sync$l$2//sync()函數(shù)
exit0
四:make命令部分:
69解釋下面的makefile文件
a="helloworld1'
b=$(a)
c:=$(a)
a="goodbye"
print:
@echob=$(b)〃echo前面的@符號(hào)的作用是禁止回顯,直接輸出
//“goodbye",而不是輸出“echob=goodbye
goodbye”
@echoc=$(c)//c是"helloworld",因?yàn)閏是:二,所以他只會(huì)從他之前找a的值
1.0example
2.B:?$(A)
3.A=later
4.all:
5.@echo$(B)
執(zhí)行make命令,我們發(fā)現(xiàn)什么都沒輸出,我們將第3ff的:=換成?
1.0example
2.B?$(A)
3.A=later
4.all:
5.?echo$(B)
執(zhí)行make,輸出later。
分析:B:=$(A)時(shí),它只會(huì)到這句語句之前去找A的值,因A沒
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 課題申報(bào)參考:巨災(zāi)指數(shù)保險(xiǎn)調(diào)節(jié)下政府應(yīng)急物資采儲(chǔ)策略優(yōu)化研究
- 課題申報(bào)參考:教育強(qiáng)國與新質(zhì)生產(chǎn)力研究
- 2025年度個(gè)人屋頂光伏安裝合同范本3篇
- 2025年塔城b2考貨運(yùn)資格證要多久
- 2025個(gè)人蝦池承包養(yǎng)殖資源整合與開發(fā)合同3篇
- 十佳書香家庭事跡
- 二零二五版智能農(nóng)業(yè)監(jiān)測(cè)系統(tǒng)采購合同提升農(nóng)業(yè)效率4篇
- 二零二五學(xué)校與家長聯(lián)合實(shí)施家校共育行動(dòng)計(jì)劃3篇
- 2025年度北京商品房買賣合同(含智能家居系統(tǒng)升級(jí)承諾)3篇
- 2025年個(gè)人間信息保密與責(zé)任承擔(dān)協(xié)議書3篇
- 2024版?zhèn)€人私有房屋購買合同
- 2024爆炸物運(yùn)輸安全保障協(xié)議版B版
- 2025年度軍人軍事秘密保護(hù)保密協(xié)議與信息安全風(fēng)險(xiǎn)評(píng)估合同3篇
- 《食品與食品》課件
- 讀書分享會(huì)《白夜行》
- 光伏工程施工組織設(shè)計(jì)
- DB4101-T 121-2024 類家庭社會(huì)工作服務(wù)規(guī)范
- 化學(xué)纖維的鑒別與測(cè)試方法考核試卷
- 2024-2025學(xué)年全國中學(xué)生天文知識(shí)競(jìng)賽考試題庫(含答案)
- 自動(dòng)駕駛汽車道路交通安全性探討研究論文
- 術(shù)后譫妄及護(hù)理
評(píng)論
0/150
提交評(píng)論