2017-09-16 60 views
-2

我正在製作腳本以從外部文件中收集值。在這個過程中,我發現自己在使用以下sed命令時遇到了問題,將結果限制在一行中。sed - 獲取文件中的最後一個值

用於通過收集下一個文本與所有詞語「值=」下面的命令的搜索,忽略用「#」

NUM=$(sed -n -e '/#/!s/^.*value=//p' $LOGFILE) 

我發現的其它命令的變化對於這一點,但其中沒有一個允許使用的行與此命令行一樣,字將被忽略。

任何要做到這一點的靈魂只捕捉最後一行,但仍然忽略包含「#」的行嗎?

可選:您是否可以修改此命令以僅捕獲數字,而忽略其餘字詞?

+7

雖然有些人可能會猜測,但如果您顯示一些樣本輸入和相應的期望輸出,您可能會得到更好的質量答案。 – John1024

回答

1

這裏有3種方式:

  1. ,如果你只需要sed的:

    sed -n '/value=/h; ${g; s/value=//p}' file 
    
  2. ,如果你可以使用其他工具:

    tac file | sed -n '/value=/{s///p;q}' 
    
  3. 或者,這是相當可讀:

    awk -F= '$1 == "value" {value = $2} END {print value}' file 
    
+0

「value =」有一個由另一個腳本編寫的數字,每增加​​一個腳本(另一個搜索該值並在同一行上替換的sed命令)。在符合「value =」之後,可能會有類似的術語,但會加上「#」。忽略具有「#」的行,我可以使腳本更加便攜 –

+0

您想要 跳過以「#」開頭的行。你知道如何匹配嗎?你知道sed命令是什麼去到輸入的下一行嗎? –

+0

我對它很陌生,我只發現這個提取「value =」結果的命令,忽略了帶「#」的行,但它不限於最後的結果:sed -n -e'/#/ !s /^.* value = // p'log.file –

相關問題