2012-10-04 126 views
0

如果我有這樣的字符串:如何在ksh中的特定字符串之後提取子字符串?

The important variable=123 the rest is not important. 

我想提取KSH中「123」的一部分。

到目前爲止,我曾嘗試:

print awk ' {substr($line, 20) }' | read TEMP_VALUE 

(這20部分只是暫時的,直到我工作,如何提取字符串的開始位置。)

但這只是打印awk ' {substr($line, 20) }' | read TEMP_VALUE(雖然這種格式確實使用這樣的代碼:print ${line} | awk '{print $1}' | read SINGLE_FILE)。

我錯過了一個簡單的命令來做到這一點(即在其他語言)?

運行Solaris 10

回答

5

你的命令失敗多種原因:你需要像

TEMP_VALUE=$(print "$line" | awk '...') 

可以使用ksh的參數擴展,但:

line="The important variable=123 the rest is not important." 
tmp=${line#*=} # strip off the stuff up to and including the equal sign 
num=${tmp%% *} # strip off a space and all following the first space 
print $num  # ==> 123 

查找「參數替代「在ksh手冊頁中。

+0

太棒了,非常感謝! – Wikis

0
$ x='The important variable=123 the rest is not important.' 
$ print -r -- "${x/*=+([[:digit:]])[[:space:]]*/\1}" 
123 
0

我以前用過這個。

echo「var = 123」| awk'BEGIN {FS =「=」} {print $ 2}'

然後,如果您需要$ 1符號,您還可以獲取變量。

6

我們是否假設在我們想要的部分之前總是有相同的長度?然後:

echo ${variable:23:3} 

或者,我們假設我們可以使用=標誌123作爲分隔符後的位置和空間?我們知道它總是3個字符嗎?如果你知道你想要的部分開始與=併爲3個字符長:

variable=${variable#*=} # strip off everything up to and including the '=' sign 
${variable:0:3} # get the next three characters. 

真正需要有關變量的長度和結構的詳細信息。

如果您知道的只是=之後的任何內容,那麼Glenn的解決方案看起來是正確的。

0

使用SED,行內編輯:

x='The important variable=123 the rest is not important.' 
echo $x | sed "s/.* important variable=\(\d\d\d\) .*/\1 

sed的字符串匹配X:

。 s/substitute命令並開始測試正則表達式 - 。*匹配任何東西,從0開始的任何次數 - 重要變量=完全匹配「重要變量=」,包括前面的空格 - (\ d \ d \ d)三個\\ s匹配3個數字,封閉轉義圓括號啓用回到引用3位實際匹配 - *一個空格和*(任何)再次 - 測試正則表達式/結束 - \ 1替換字符串

匹配文本(所有$ x的,其實)將被替換字符串替換,即$ x中的3個數字。

2

(對不起,有點遲到這個!) 你打算如何確定「123」是要提取的部分?如果標準僅僅是「=」符號後面的第一個字段,您可以這樣做:

echo「重要變量= 123其餘並不重要」| cut -f2 -d = | cut -f1 -d「」

相關問題