2010-10-25 17 views
24

我有一個變量,其值爲"abcd.txt"如何將sed的輸出讀入變量

我要存儲在第二個變量".txt"之前的一切,更換".txt"".log"

我沒有問題,呼應所需的值:

a="abcd.txt" 

echo $a | sed 's/.txt/.log/' 

但如何獲取價值"abcd.log"進入第二個變量?

感謝,

羅傑

回答

45

您可以使用command substitution爲:

new_filename=$(echo "$a" | sed 's/.txt/.log/') 

或建議不超過反引號的方式:

new_filename=`echo "$a" | sed 's/.txt/.log/'` 
+1

甚至更​​好:'new_filename = 「$(回聲 」$ A「 | SED的/ .TXT/.LOG /')」'(Bash中對''「'裏面的命令替換仍然匹配)。 – Benoit 2010-10-25 11:29:54

+0

「不太推薦」?也許對bash來說,但shell沒有被指定,所以它可能是唯一的選擇:-) – 2010-10-25 12:17:59

+0

@Chris:你說的對.. – codaddict 2010-10-25 12:24:54

9

您可以使用反引號來分配輸出對一個變量的命令:

logfile=`echo $a | sed 's/.txt/.log/'` 

這就是假設你正在使用Bash。

替代地,對於此特定問題Bash有圖案匹配構建體本身:

stem=$(textfile%%.txt) 
logfile=$(stem).log 

logfile=$(textfile/%.txt/.log) 

在最後一個例子的%將確保只有最後的.txt被替換。

+0

謝謝你的提示。 – 2010-10-25 12:41:41

3

,如果你有猛砸/的ksh

$ var="abcd.txt" 
$ echo ${var%.txt}.log 
abcd.log 
$ variable=${var%.txt}.log 
+0

謝謝,但這並沒有讓我在任何地方... 我已經能夠回聲......問題是我想把它變成一個變量。 – 2010-10-25 12:14:17

+1

如果你想把它變成變量,只需分配它?聲明和分配變量是shell腳本中非常基本的東西,我懷疑你不知道該怎麼做。 – ghostdog74 2010-10-25 12:52:15