天天看點

awk處理特殊字元(原創)

單引号 ( ' ' )

如果我們想查找的是susan goldberg,不能直接使用grep susan goldberg phonebook指令,grep會把goldberg和phonebook當作需要搜尋的檔案

$ grep 'susan gold' phonebook

susan goldberg 403-212-4921

當shell碰到第一個單引号時,它忽略掉其後直到右引号的所有特殊字元

如果想列印單引号,可以采用如下方式

$ awk 'begin{print "'\''"} '

'

或者用047代替單引号

$ awk '{print "\047"}'

雙引号 ( " " )

雙引号作用與單引号類似,差別在于它沒有那麼嚴格。單引号告訴shell忽略所有特殊字元,而雙引号隻要求忽略大多數,具體說,括在雙引号中的三種特殊字元不被忽略:$,\,` ,即雙引号會解釋字元串的特别意思,而單引号直接使用字元串.如果使用雙引号将字元串賦給變量并回報它,實際上與直接回報變量并無差别。如果要查詢包含空格的字元串,經常會用到雙引号。

$ x=*

$ echo $x

hello.sh menus.sh misc.sh phonebook tshift.sh

$ echo '$x'

$x

$ echo "$x"

*

這個例子可以看出無引号、單引号和雙引号之間的差別。在最後一種情況中,雙引号告訴shell在引号内照樣進行變量名替換,是以shell把$x替換為*,因為雙引号中不做檔案名替換,是以就把*作為要顯示的值傳遞給echo。

對于第一種情況需要進一步說明,shell在給變量指派時不進行檔案名替換(這從第三種情況中也能看出來),各步驟發生的精确次序如下:

shell掃描指令行,把x的值設為星号*;

shell再次掃描指令行,碰到星号*,把它替換成目前目錄下的檔案清單;

shell啟動執行echo指令,把檔案清單作為參數傳遞給echo.

這個指派的先後次序非常重要:shell先作變量替換,然後作檔案名替換,最後把這行處理為參數

反引号(``)

指令替換是指shell能夠将一個指令的标準輸出插在一個指令行中任何位置。shell中有兩種方法作指令替換:把shell指令用反引号或者$(...)結構括起來,其中,$(...)格式受到posix标準支援,也利于嵌套。

$ echo the date and time is `date`

the date and time is 三 6月 15 06:10:35 cst 2005

$ echo your current working directory is $(pwd)

your current working directory is /home/howard/script.

反斜杠 backslash-escaped( \ )

反斜杠一般用作轉義字元,或稱逃脫字元,linux如果echo要讓轉義字元發生作用,就要使用-e選項,且轉義字元要使用雙引号

echo -e "\n"

反斜杠的另一種作用,就是當反斜杠用于一行的最後一個字元時,shell把行尾的反斜杠作為續行,這種結構在分幾行輸入長指令時經常使用

參考至:http://www.cnblogs.com/rootq/articles/1417138.html

                http://blog.chinaunix.net/uid-639516-id-2692529.html

本文原創,轉載請注明出處、作者

如有錯誤,歡迎指正

郵箱:[email protected]

作者:czmmiao  文章出處:http://czmmiao.iteye.com/blog/1887660

繼續閱讀