2011-12-28 61 views
2

我正在使用Solaris 5.10並正在處理Bash Shell。我在下面的語句不工作如何在grep的幫助下將data/data1匹配爲word

ssh 172.18.16.55 "df -h" |grep -w /data1 

一個shell腳本,當我更換/DATA1DATA1(即去掉「/」),它工作正常。

我有像下面這樣工作正常的另一個聲明。

ssh 172.18.16.55 "df -h" |grep -w /dev/dsk/c1t0d0s0 

根據我的理解,第一次出現的「/」(正斜槓)沒有被shell腳本識別。我想知道shell腳本中「/」的含義是什麼?下面的 是我的輸出。

[email protected] # ssh 172.18.16.55 "df -h" |grep '/data1\>' 
/dev/md/dsk/d50   84G 59G 24G 71% /data1 

[email protected] # ssh 172.18.16.55 "df -h" |grep -w /data1 

不打印任何東西。


[email protected] # ssh 172.18.16.55 "df -h" |grep /data1 
/dev/md/dsk/d50   84G 59G 24G 71% /data1 
+0

定義「不工作」。預期產出是多少?實際產出是多少? – 2011-12-28 06:21:37

+0

即使它有**/data1 **,grep也不會返回任何東西。它應該返回包含named/data1的裝載點。 – 2011-12-28 06:24:37

回答

2

grep-w選項告訴將圖案作爲「單詞」匹配,即在它之前和之後與「單詞邊界」匹配。我認爲發生的事情是,grep的單詞邊界的想法與您所期望的不符。

您可以使用\<\>明確地匹配單詞邊界。

下面是一些例子Solaris 9系統上運行:

% echo /dev/md/dsk/d50 84G 59G 25G 71% /data1 | grep -w /data1 
% echo /dev/md/dsk/d50 84G 59G 25G 71% /data1 | grep '\</data1\>' 
% echo /dev/md/dsk/d50 84G 59G 25G 71% /data1 | grep '/data1\>' 
/dev/md/dsk/d50 84G 59G 25G 71% /data1 
% 

顯然的Solaris grep不考慮空間和/角色之間的邊界是一個字邊界。

我建議運行man grep,並且可能遵循一些「另請參見」參考資料,以瞭解如何記錄這些內容。 (我試圖自己做,但我有權訪問的Solaris系統目前有問題。)

如果要將此命令用作合理便攜式腳本的一部分,則需要注意這一點是GNU grep行爲不同的區域。我與GNU grep我的Linux系統上執行以下操作:

% echo /dev/md/dsk/d50 84G 59G 25G 71% /data1 | grep -w /data1 
/dev/md/dsk/d50 84G 59G 25G 71% /data1 
% echo /dev/md/dsk/d50 84G 59G 25G 71% /data1 | grep '\</data1\>' 
% echo /dev/md/dsk/d50 84G 59G 25G 71% /data1 | grep '/data1\>' 
/dev/md/dsk/d50 84G 59G 25G 71% /data1 
% 

請注意,你的問題本來就容易回答,如果你有我們表明您預計要匹配的確切行。

+0

這是我想要匹配的行**/dev/md/dsk/d50 84G 59G 25G 71%/ data1 ** – 2011-12-28 08:19:43

+0

@Balaswamyvaddeman:很奇怪。我剛剛嘗試過'echo/dev/md/dsk/d50 84G 59G 25G 71%/ data1 | grep -w/data1',並打印出該行。當你使用'grep'/ data1 \>''而不是'grep -w/data1'時會發生什麼?那麼'grep/data1'呢? – 2011-12-28 08:31:23

+0

** grep'/ data1 \>'**打印行。 ** grep -w/data1 **不會打印任何內容。 ** grep/data1 **打印行 – 2011-12-28 08:35:57

3

你肯定通過df -h返回的輸出實際上包含字符串/data1?如果找不到字符串,grep將不會打印任何內容。

編輯爲了使答案更容易找到,他的問題是,grep沒有考慮/data1一個字。

+0

yes它具有/ data1作爲裝載點 – 2011-12-28 06:21:19

+0

嘗試轉儲'-w'標誌。這可能是問題所在。如果這不起作用,你可以上傳輸出嗎? – 2011-12-28 06:25:43

+0

你的權利,它正在工作沒有-w。只是想知道與** - W **選項爲什麼它不考慮/ – 2011-12-28 06:31:21