2016-11-16 75 views
0

我是UNIX新手,正在瀏覽一個腳本文件並跨過一個片段。 我試圖分析片段。我讀了一下'sed - stream editor'命令,還有sed -e選項。 我也執行了這個代碼片段,可以看到輸出結果。但我無法理解正在發生的事情。以下是摘錄。UNIX中的sed命令 - 無法理解

ID=101 
echo ABCDEFGHIJK KLMJN | \ 
sed -e "1,\$s/ *$/^\"`echo $ID`\"/" \ 
>a.txt 

輸出是ABCDEFGHIJK KLMJN^"101"

有很多在他們使用sed命令腳本文件的地方。有人可以幫助我如何解碼這些類型的片段?

+2

這是一個可怕的命令。 – 123

+0

我與@ 123。請不要使用這個'sed'作爲好習慣的例子,這太可怕了。 – cdarke

回答

3

你應該看看各部分進行說明:

sed -e "1,\$s/ *$/^\"`echo $ID`\"/" 
     | | |    | 
     1 2   3 
  1. 你想只對特定的線路工作。對於這個例子,從第一行開始,到最後一行結束。在這種情況下,不需要這樣寫。因此,

    sed -e "s/ *$/^\"$(echo $ID)\"/" 
    

    完全一樣。

  2. 這裏是替換命令。在這種情況下,您可以在最後一個非空格和行尾之間替換零個或多個空格。如果你想了解更多關於這個,我建議使用谷歌搜索regex

  3. 反撥(``)實際上是一種'殼體'。它會導致shell在更換之前執行命令。爲了更可讀的方式,你應該使用$(echo $ID)。之後,您將從2中替換正則表達式,其結果將爲^"101"

而且該結果後ABCDEFGHIJK KLMJN^"101"

+0

但是這不是取代空格,如果你看看輸出,它裏面還有空格。 – NJMR

+0

你必須知道'$'是一個特殊的正則表達式字符,它表示行的結尾。因此,該命令在整個字符串的末尾搜索_zero_或更多空格,並將其替換爲所提到的字符串。 –

+0

在這種特殊情況下,您可以通過'echo'ABCDEFGHIJK KLMJN^\「$ {ID} \」「'實現完全相同的行爲。 –