国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
find與grep命令及正則表達(dá)式|find,grep,命令,正則表達(dá)式,Linux-中國(guó)...

find與grep命令及正則表達(dá)式

作者:      來源:sulog.cublog.cn     發(fā)表時(shí)間:2007-11-21     瀏覽次數(shù):38560      字號(hào):    

  在我們開始學(xué)習(xí)新的Shell編程知識(shí)之前,我們先來看一下兩個(gè)更為有用的兩個(gè)命令,這兩個(gè)命令雖然并不是Shell的一部分,但是在進(jìn)行Shell編程時(shí)卻會(huì)經(jīng)常用到.隨后我們會(huì)來看一下正則表達(dá)式.

find命令

  我們先來看的是find命令.這個(gè)命令對(duì)于我們用來查找文件時(shí)是相當(dāng)有用的,但是對(duì)于Linux新手來說卻有一些難于使用,在一定程序是由于他所帶的選項(xiàng),測(cè)試,動(dòng)作類型參數(shù),而且一個(gè)參數(shù)的執(zhí)行結(jié)果會(huì)影響接下來的參數(shù).
在我們深入這些選項(xiàng)和參數(shù)之前,我們先來看一個(gè)非常簡(jiǎn)單的例子.假如在我們的機(jī)子上有一個(gè)文件wish.我們來進(jìn)行這個(gè)操作時(shí)要以root身份來運(yùn)行,這樣就可以保證我們可以搜索整個(gè)機(jī)子:

# find / -name wish -print
/usr/bin/wish
#

  正如我們可以想到的,他會(huì)打印出搜索到的結(jié)果.很簡(jiǎn)單,是不是?
然而,他卻需要一定的時(shí)間來運(yùn)行,因?yàn)樗矔?huì)同時(shí)搜索網(wǎng)絡(luò)上的Window機(jī)器上的磁盤.Linux機(jī)器會(huì)掛載大塊的Window機(jī)器的文件系統(tǒng).他也會(huì)同時(shí)那些位置,雖然我們知道我們要查找的文件位于Linux機(jī)器上.
這也正是第一個(gè)選項(xiàng)的用武之地.如果我們指定了-mount選項(xiàng),我們就可以告訴find命令不要搜索掛載的目錄.

# find / -mount -name wish -print
/usr/bin/wish
#

這樣我們?nèi)匀豢梢运阉鬟@個(gè)文件,但是這一次并沒有搜索掛載的文件系統(tǒng).

find命令的完整語(yǔ)法如下:

find [path] [options] [tests] [actions]

path是一個(gè)很簡(jiǎn)單的部分:我們可以使用絕對(duì)路徑,例如/bin,或者是使用相對(duì)路徑,例如.. .如果我們需要我們還可以指定多個(gè)路徑,例如 find /var /home

主要的一些選項(xiàng)如下:
-depth    在查看目錄本身以前要先搜索目錄中的內(nèi)容
-follow    跟隨符號(hào)鏈接
-maxdepths N    在搜索一個(gè)目錄時(shí)至多搜索N層
-mount(或-xdev)    不要搜索其他的文件系統(tǒng)

  下面的是一些test的選項(xiàng).我們可以為find命令指定大量的測(cè)試,并且每一個(gè)測(cè)試會(huì)返回真或是假.當(dāng)find命令工作時(shí),他會(huì)考查順序查找到的文件,并且會(huì)在這個(gè)文件上按順序進(jìn)行他們所定義的測(cè)試.如果一個(gè)測(cè)試返回假,find命令會(huì)停止他當(dāng)前正在考查的文件并繼續(xù)進(jìn)行下面的動(dòng)作.我們?cè)谙卤碇辛谐龅闹皇且恍┪覀冏畛S玫降臏y(cè)試,我們可以通過查看手冊(cè)頁(yè)得到我們可以利用find命令使用的可能的擴(kuò)展列表項(xiàng).

-atime N    N天以前訪問的文件
-mtime N    N天以前修改的文件
-name pattern    除了路徑,與指定的類型匹配的文件名.為了保證指定的類型傳遞給find命令而并不是立即被Shell賦值,指定的類型必須用引號(hào)進(jìn)行引用.
-newer otherfile    與otherfile文件相比要新的文件
-type C        C類型的文件,而這里的C可以指定的一種類型.最常用的是d代表目錄,而f是指普通的文件.對(duì)于其他的文件類型,我們可以查看手冊(cè)頁(yè).
-user username    指定的用戶所擁有的文件
我們也可以使用運(yùn)算符進(jìn)行測(cè)試的組合.大多數(shù)的有兩種格式:短格式和長(zhǎng)格式.
!    -not    測(cè)試的反
-a    -and    所有的測(cè)試必須為真
-o    -or    測(cè)試中某一個(gè)為真

  我們可以使用括號(hào)來強(qiáng)行改變測(cè)試和運(yùn)算符的次序.因?yàn)檫@些對(duì)于Shell來說有著特殊的意義,所以我們也需要使用反斜線將他們作為一個(gè)整體進(jìn)行引用.另外, 如果我們?yōu)槲募付似ヅ漕愋?我們也必須用引號(hào)進(jìn)行引用,這樣就可以避免他們被Shell進(jìn)行擴(kuò)展,從而可以將他們直接傳遞給find命令.所以如果我們要寫一個(gè)這樣的測(cè)試,要查找比X文件要近或者是以一個(gè)范圍開頭的文件,我們要寫成下面的形式:

\(-newer X -o -name “_*” \)

現(xiàn)在我們要試著在當(dāng)前的目錄下查找最近修改日期比while2更近的文件,我們可以用下面的命令:

$ find . -newer while2 -print
.
./elif3
./words.txt
./words2.txt
./_trap
$

  我們?cè)谏厦嫠玫拿羁雌饋硭坪醪诲e(cuò),但是我們卻同時(shí)也搜索了當(dāng)前的目錄文件,而這并不是我們所希望的,我們所感興趣只是常規(guī)文件.所以我們可以加上另外一個(gè)測(cè)試-type f:

$ find . -newer while2 -type f -print
./elif3
./words.txt
./words2.txt
./_trap
$

工作原理:

  這些命令是如何進(jìn)行工作的呢?我們指定find命令應(yīng)該在當(dāng)前的目錄下進(jìn)行查找(.),而我們所要查找的是比while2更新的文件(-newer while2),而且如果已經(jīng)傳遞了測(cè)試,還要測(cè)試這個(gè)文件是否為一個(gè)常規(guī)文件(-type -f).最后,我們使用我們以前用過的動(dòng)作,-print,僅僅是來驗(yàn)證我們所找到的文件.

  下面我們要查找的文件或者是以下劃線開頭的或者是要比while2文件新的文件,但是也必須為一個(gè)常規(guī)文件.這個(gè)例子可以向我們展示如何來進(jìn)行測(cè)試的組合:

$ find . \( -name “_*” -or -newer while2 \) -type f -print
./elif3
./words.txt
./words2.txt
./_break
./_if
./_set
./_shift
./_trap
./_unset
./_until
$

  這時(shí)我們可以看到這并不是一件很難的事情,不是這樣嗎?我們必須轉(zhuǎn)義圓括號(hào),這樣他就不會(huì)被Shell所保護(hù),同時(shí)用引號(hào)引用*,這樣他就可以直接傳遞給find命令了.

  既然我們現(xiàn)在能夠可靠的查找文件,下面我們就來看一下當(dāng)我們查找指定的文件時(shí)我們可以進(jìn)行的一些協(xié)作.我們要再一次強(qiáng)調(diào),我們?cè)谶@里所列出的只是一些最常用的選項(xiàng),我們可以查看手冊(cè)頁(yè)得到全部的集合.

-exec command    執(zhí)行一個(gè)命令.這是我們最常執(zhí)行的動(dòng)作.
-ok command    與-exec相類似,所不同的只是他會(huì)提示用戶在執(zhí)行將要執(zhí)行的命令之前進(jìn)行命令的確認(rèn).
-print        打印出文件名
-ls        使用ls命令列出當(dāng)前的文件
-exec和-ok命令會(huì)同一行的參數(shù)子序列作為他的參數(shù)的一部分,直到遇到一個(gè)終結(jié)符\;序列.對(duì)于-exec和-ok來說字符串{}是珍上特殊的類型,而且會(huì)為當(dāng)前文件的絕對(duì)路徑所替換.

這樣的解釋也許并不是太認(rèn)人容易理解,但是一個(gè)例子也許可以很好的來說明這些.

如下面的一個(gè)簡(jiǎn)單的例子:

$ find . -newer while2 -type f -exec ls -l {} \;
-rwxr-xr-x    1 rick     rick          275 Feb 8 17:07 ./elif3
-rwxr-xr-x    1 rick     rick          336 Feb 8 16:52 ./words.txt
-rwxr-xr-x    1 rick     rick         1274 Feb 8 16:52 ./words2.txt
-rwxr-xr-x    1 rick     rick          504 Feb 8 18:43 ./_trap
$

  正如我們現(xiàn)在所看到的,find命令是相當(dāng)有用的.要用好這個(gè)命令只需要一些簡(jiǎn)單的練習(xí).然而這樣的練習(xí)也許要付一定的代價(jià),所以我們應(yīng)做一些find命令的實(shí)驗(yàn).

grep命令

  我們將要看到的第二個(gè)非常有用的命令為grep命令,這是一個(gè)并不常見的名字,他是通用正則表達(dá)式解析器的簡(jiǎn)稱(General Regular Expression Parser).我們使用find命令在我們的系統(tǒng)是查找所需的文件,但是我們卻要使用grep命令在文件中查找指定的字符串.而事實(shí)上,最常用的做法就是當(dāng)我們?cè)谑褂胒ind命令時(shí)將grep作為一個(gè)命令傳遞給-exec.

grep命令可以帶選項(xiàng),匹配的模式以及我們要在其中查找的文件:
grep [options] PATTERN [FILES]
如果并沒有指定文件名,他就會(huì)搜索標(biāo)準(zhǔn)輸入.
讓我們從grep命令的主要的選項(xiàng)開始.我們?cè)谶@里列出的只是一些主要的選項(xiàng),我們可以從手冊(cè)中得到更為詳細(xì)的內(nèi)容說明.

-c    打印出匹配行的總數(shù),而不是打印出匹配的行
-E    打開擴(kuò)展表達(dá)式
-h    禁止將在其中查找到匹配內(nèi)容的文件名作為輸出行的前綴
-i    忽略大小寫
-l    列出帶用匹配行的文件名,而不是輸出實(shí)際的匹配行
-v    將匹配類型轉(zhuǎn)換為選擇不匹配的行而不是匹配的行
如下面的一些例子:
$ grep in words.txt
When shall we three meet again. In thunder, lightning, or in rain?
I come, Graymalkin!
$ grep -c in words.txt words2.txt
words.txt:2
words2.txt:14
$ grep -c -v in words.txt words2.txt
words.txt:9
words2.txt:16
$

工作原理:

  第一個(gè)例子中并沒有指定選項(xiàng),grep命令只是簡(jiǎn)單在的words.txt文件中查找字符串in,并且打印出所匹配的行.在這里并沒有打印出文件名,這是因?yàn)樵谶@里我們只是使用了一個(gè)文件.
在第二個(gè)例子中打印出在兩個(gè)不同的中匹配行的總數(shù),在這種情況就要打印出文件名.
在最后的一個(gè)例子中我們使用了-v選項(xiàng)來轉(zhuǎn)換查找的條件并且打印出在兩個(gè)文件中不匹配的總行數(shù).

正則表達(dá)式

  正是我們所看到的,grep命令的基本用法是比較容易掌握的.現(xiàn)在我們要來看一下基本的正則表達(dá)式,這會(huì)允許我們做一些更為復(fù)雜的匹配.正如我們?cè)谇懊嫠岬降?正則表達(dá)式是用在Linux或是共他的一些開源中的語(yǔ)言.我們可以在vi或是在編寫Perl腳本時(shí)使用.

在正則表達(dá)式的使用過程中,一些字符會(huì)被以不同的方式進(jìn)行處理.最常見的一些用法如下:

^    在一行的開頭
$    在一行的結(jié)尾
.    任意一個(gè)單一字符
[]    方括號(hào)中所包含是字母的范圍,其中的任何一個(gè)都可以進(jìn)行匹配,例如a-e的字母范圍,或者是我們可以使用^來進(jìn)行反義.
如果我們要將他們作為普通的字符來使用就要在這些字符前面加上\.所以如果我們要查找一個(gè)$字符,我們就要使用\$來進(jìn)行查找.

下面的是一些可以在方括號(hào)中使用的比較有用的特殊匹配:

[:alnum:]    字母數(shù)字字符
[:alpha:]    字母
[:ascii:]    ASCII字符
[:blank:]    空格或是Tab
[:cntrl:]    ASCII碼控制字符
[:digit:]    數(shù)字
[:graph:]    非控制,非空格字符
[:lower:]    小寫字母
[:print:]    可打印字符
[:punct:]    標(biāo)點(diǎn)字符
[:space:]    空白字符,包括垂直Tab
[:upper:]    大寫字符
[:xdigit:]    十六進(jìn)制數(shù)字

  另外,如果同時(shí)使用-E選項(xiàng)指定了擴(kuò)展匹配,在正則表達(dá)式的后面也許會(huì)跟一些其他的控制匹配類型組合的字符.如果我們只是想將他們作為普通的字符進(jìn)行使用,我們也要在其前面加上轉(zhuǎn)義符\.

    可選的匹配,但是最多匹配一次
*    必須匹配0個(gè)或是多個(gè)項(xiàng)目
+    必須匹配1個(gè)或是多個(gè)項(xiàng)目
{n}    必須匹配n次
{n,}    必須匹配n次或是更多次
{n,m}    匹配范圍為n次到m次,包括m次

  這些內(nèi)容看起來有一些復(fù)雜,但是如果我們循序漸進(jìn),我們就會(huì)發(fā)現(xiàn)事實(shí)上這些內(nèi)容并不如我們?cè)诘谝谎劭吹綍r(shí)那樣的復(fù)雜.最簡(jiǎn)單的掌握正則表達(dá)式的方法就是簡(jiǎn)單的試一些例子:

如果我們要查找以字符e結(jié)尾的行我們可以用下面的命令:

$ grep e$ words2.txt
Art thou not, fatal vision, sensible
I see thee yet, in form as palpable
Nature seems dead, and wicked dreams abuse
$

  正如我們所看到的,這個(gè)命令會(huì)搜索出以e結(jié)尾的匹配行.
現(xiàn)在假設(shè)我們要查找以字母a結(jié)尾的單詞.要達(dá)到這個(gè)目的,我們?cè)诜嚼ㄌ?hào)中使用特殊的匹配.在這樣的情況下,我們要使用[[:blank:]],這會(huì)測(cè)試一個(gè)空格或是一個(gè)Tab:

$ grep a[[:blank:]] words2.txt
Is this a dagger which I see before me,
A dagger of the mind, a false creation,
Moves like a ghost. Thou sure and firm-set earth,
$

  現(xiàn)在假設(shè)我們要查找一個(gè)以Th開頭的三個(gè)字母的單詞.在這種情況下,我們需要同時(shí)使用[[:space:]]來決定一個(gè)單詞的結(jié)尾并使用.來匹配另外的一個(gè)字母:

$ grep Th.[[:space:]] words2.txt
The handle toward my hand? Come, let me clutch thee.
The curtain’d sleep; witchcraft celebrates
Thy very stones prate of my whereabout,
$

  最后我們要使用擴(kuò)展的grep命令來查找10個(gè)字符長(zhǎng)的小寫字母的單詞.在這里我們要指定一個(gè)字符的范圍的來匹配a到z,同時(shí)指定字符的10次重復(fù):

$ grep -E [a-z]\{10\} words2.txt
Proceeding from the heat-oppressed brain?
And such an instrument I was to use.
The curtain’d sleep; witchcraft celebrates
Thy very stones prate of my whereabout,
$

  我們?cè)谶@里只是接觸正則表達(dá)式一些相對(duì)來說更為重要的一部分.正如在Linux中的其他的大多數(shù)的內(nèi)容,在這之外會(huì)許多的文檔來幫助我們要發(fā)現(xiàn)更為詳細(xì)的內(nèi)容,但是學(xué)習(xí)正則表達(dá)式的最好的方法就是要實(shí)驗(yàn)這些表達(dá)式.

命令執(zhí)行:

  當(dāng)我們編寫腳本時(shí),我們常常需要在Shell腳本中取得命令執(zhí)行結(jié)果的結(jié)果來使用.也就說我們需要執(zhí)行一個(gè)命令并將這個(gè)命令的輸出結(jié)果放在一個(gè)變量中.這時(shí)我們可以使用我們?cè)谇懊娴膕et命令的例子中所介紹的$(command)語(yǔ)法.這也是一個(gè)相對(duì)較老的格式,而最常使用的用法是`command`格式.

  所有新的腳本應(yīng)使用$(...)的格式,這可以用來避免一些相當(dāng)復(fù)雜的在反引號(hào)命令中使用$,`,\所造成的轉(zhuǎn)換規(guī)則.如果在`...`結(jié)構(gòu)中使用了反引號(hào),我們就需要使用\進(jìn)行轉(zhuǎn)義.這些相對(duì)模糊的字符會(huì)使得程序感到迷惑,有時(shí)甚至是一些經(jīng)驗(yàn)豐富的程序也不得不進(jìn)行一些試驗(yàn)以使得在反引號(hào)命令中的引號(hào)可以正確的進(jìn)行工作.

$(command)命令的結(jié)果只是簡(jiǎn)單的命令的輸出.在這里我們要注意的是這并不是這個(gè)命令的返回狀態(tài),而是輸出的字符串.如下面的例子:

#!/bin/sh
echo The current directory is $PWD
echo The current users are $(who)
exit 0

  因?yàn)楫?dāng)前的目錄是一個(gè)Shell環(huán)境變量,所以第一行并不需要使用這種命令執(zhí)行結(jié)構(gòu).然而,who命令的執(zhí)行結(jié)果,如果希望他在這個(gè)腳本中可見,我們就要使用這種命令結(jié)構(gòu).

如果我們希望將他們的結(jié)果放在一個(gè)變量中,我們可以像平常一樣將他們賦值給一個(gè)變量:

whoisthere=$(who)
echo $whoisthere

  將一個(gè)命令的執(zhí)行結(jié)果放在一個(gè)腳本變量中的能力是相當(dāng)強(qiáng)大的,因?yàn)檫@樣就可以很容易的在腳本中使用現(xiàn)在的命令并取得他們的輸出.如果你發(fā)現(xiàn)在你正在試著轉(zhuǎn)換一個(gè)標(biāo)準(zhǔn)命令在標(biāo)準(zhǔn)輸出上的輸出結(jié)果的參數(shù)集合并將他們作為一個(gè)程序的參數(shù),你就會(huì)發(fā)現(xiàn)命令xargs會(huì)幫助你完成這一切.可以查看手冊(cè)頁(yè)得到更深更詳細(xì)的內(nèi)容.
有時(shí)會(huì)出現(xiàn)的一個(gè)問題就是我們要調(diào)用的命令會(huì)在我們所希望的文本出現(xiàn)之前輸出了一些空白符,或者是比我們所希望的更多的內(nèi)容.在這樣的情況下,我們可以使用我們?cè)谇懊嫠f到的set命令.

算術(shù)擴(kuò)展

  我們已經(jīng)使用了expr命令,這可以允許處理簡(jiǎn)單的算術(shù)命令,但是他的執(zhí)行是相當(dāng)?shù)穆?因?yàn)樵谔幚韊xpr命令時(shí)需要調(diào)用一個(gè)新的Shell.

  一個(gè)新的更好的替換就是$((...))擴(kuò)展.通過將我們所希望的表達(dá)式包在括號(hào)里以便在$((...))中進(jìn)行賦值,我們可以進(jìn)行更為有效的簡(jiǎn)單算術(shù).

如下面的例子:

#!/bin/sh
x=0
while [ “$x” -ne 10 ]; do
    echo $x
    x=$(($x+1))
done
exit 0

參數(shù)擴(kuò)展

我們?cè)谇懊嬉呀?jīng)看到了參數(shù)分配與擴(kuò)展的最簡(jiǎn)單形式,在那里我們是這樣寫的:

foo=fred
echo $foo

  當(dāng)我們要在一個(gè)變量的結(jié)尾處加上另外的一個(gè)字符時(shí)卻會(huì)發(fā)生問題.假設(shè)我們要寫一個(gè)簡(jiǎn)短的腳本來處理名為1_tmp和2_tmp的文件,我們可以試著用下面的腳本來處理:

#!/bin/sh
for i in 1 2
do
    my_secret_process $i_tmp
done

但是在每一個(gè)循環(huán)中,我們會(huì)得到下面的信息:

my_secret_process: too few arguments

發(fā)生了什么錯(cuò)誤呢?

  問題就在于Shell會(huì)試著將變量$i_tmp用他的變量值進(jìn)行替換,但是卻并不存在這個(gè)變量.而Shell并不會(huì)認(rèn)為這是一個(gè)錯(cuò)誤,而只是用空值來進(jìn)行替換,所以并沒有參數(shù)傳遞給my_secret_process.要將$i的擴(kuò)展保護(hù)為變量的一部分,我們需要將i放在一對(duì)花括號(hào)中:

#!/bin/sh
for i in 1 2
do
    my_secret_process ${i}_tmp
done

  這樣以后在第一個(gè)循環(huán)中,i的值會(huì)用${i}進(jìn)行替換,從而給出一個(gè)實(shí)際的文件名.這樣我們就已經(jīng)將一個(gè)參數(shù)的值替換為一個(gè)字符串了.

  我們可以在Shell中進(jìn)行許多的替換.常常這樣的方法會(huì)為參數(shù)的處理問題提供一個(gè)優(yōu)雅的解決方法.

常用到的一些如下表:

${parm:-default}    如果一個(gè)參數(shù)為空,則將他設(shè)定為一個(gè)默認(rèn)值.
${#parm}        給出參數(shù)的長(zhǎng)度.
${parm%word}        從末尾開始,移除與word相匹配的最小部分并返回其余的部分.
${parm%%word}        從末尾開始,移除與word相匹配的最長(zhǎng)部分并返回其余的部分.
${parm#word}        從開頭開始,移除與word相匹配的最小部分并返回其余的部分.
${parm##word}        從開頭開始,移除與word相匹配的最長(zhǎng)部分并返回其余的部分.

  這些替換對(duì)于我們要處理字符串來說是相當(dāng)有用的.而最后的四個(gè)可以用來移除字符串中的部分內(nèi)容,而這對(duì)于處理文件名和路徑是更為有用的.如下面的一些例子中所示的:

#!/bin/sh
unset foo
echo ${foo:-bar}
foo=fud
echo ${foo:-bar}
foo=/usr/bin/X11/startx
echo ${foo#*/}
echo ${foo##*/}
bar=/usr/local/etc/local/networks
echo ${bar%local*}
echo ${bar%%local*}
exit 0

如果我們運(yùn)行這個(gè)腳本我們會(huì)得到下面的輸出結(jié)果:

bar
fud
usr/bin/X11/startx
startx
/usr/local/etc
/usr

工作原理:

  第一個(gè)句子,${foo:-bar},會(huì)為foo的值指定為bar,因?yàn)楫?dāng)這個(gè)語(yǔ)句開始執(zhí)行時(shí)并沒有為foo指定任何值.foo的值會(huì)保持不變直到他遇到unset語(yǔ)句.

在這里我們有一些需要我們注意的內(nèi)容:

${foo:=bar}將會(huì)設(shè)置變量$foo.這個(gè)字符串運(yùn)算符會(huì)檢測(cè)foo存在并且不為空值.如果他不為空,則會(huì)返回他的值,但是如果是相反的情況,就會(huì)將foo的值設(shè)為bar并且會(huì)返回替換的結(jié)果值.
${foo:?bar}會(huì)打印出foo: bar,而如果foo并不存在或是他被設(shè)為空值則會(huì)退出命令.
最后,${foo:+bar},如果foo存在并且不為空則會(huì)返回bar.
{foo#*/}語(yǔ)句進(jìn)行匹配并且只是移除左面的內(nèi)容(在這里我們要記住*匹配0個(gè)或是多個(gè)字符).{foo##*/}進(jìn)行匹配并會(huì)移除盡可能多的內(nèi)容,所以他會(huì)移除了最右面的/以及他前面的所有字符.
{bar%local*}語(yǔ)句匹配從右面開始直到第一次出現(xiàn)local的字符,而{bar%%local*}會(huì)從右面開始匹配盡可能多的字符,直到第一次發(fā)現(xiàn)local.

  因?yàn)閁nix和Linux都比較強(qiáng)的依賴于過濾的概念,所以我們常常要將一個(gè)操作的執(zhí)行結(jié)果進(jìn)行手工重定向.假設(shè)我們要使用cjpeg命令將一個(gè)GIF的文件轉(zhuǎn)換為JPEG的文件:

$ cjpeg image.gif > image.jpg

也許有時(shí)我們會(huì)在大量的文件上進(jìn)行這樣的操作.這時(shí)我們?nèi)绾巫詣?dòng)重定向?我們可以很容易的這樣來做:

#!/bin/sh
for image in *.gif
do
   cjpeg $image > ${image%%gif}jpg
done

這個(gè)腳本可以將當(dāng)前目錄下的每一個(gè)GIF文件轉(zhuǎn)換成為JPEG文件.

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
grep 命令中的正則表達(dá)式
三分鐘教你輕松掌握 grep 命令中的正則表達(dá)式
UNIX 技巧: UNIX 高手的另外 10 個(gè)習(xí)慣
shell腳本regex正則表達(dá)式 和 字符串替換
Grep 和 Egrep 使用細(xì)解
培養(yǎng)這10個(gè)習(xí)慣,你就離UNIX高手更進(jìn)一步了
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服