2011-07-28 19 views
2

我試圖從模式開始獲取子串。如何獲得子串,從bash中的模式的第一次出現開始

我會簡單地使用cut,但是,如果模式是長几個字符,將無法正常工作。

如果我需要一個單字符,分隔符,那麼這將這樣的伎倆:

result=`echo "test String with (element in parenthesis) end" | cut -d "(" -f 2-` 

編輯:抽樣檢驗:

INPUT: ("This test String is an input", "in") 
OUTPUT: "ing is an input" 

INPUT: ("This test string is an input", "in ") 
OUTPUT: "" 

INPUT: ("This test string is an input", "n") 
OUTPUT: "ng is an input" 

注:括號意味着輸入都需要一個字符串和一個分隔符字符串。

+0

您希望的輸出是什麼?我不清楚確切的問題。 – matchew

+0

期望的輸出是原始字符串的一個子部分,從與該模式的第一次完全匹配開始,到原始字符串的末尾結束。 – iliaden

+1

仍然不清楚 - 您可以提供兩個文本,其中一個帶有SAMPLE-INPUT,一個帶有SAMPLE-OUTPUT?給我們一個不起作用的例子只是指向一個大方向。 – nhed

回答

1

編輯:

總之,要求什麼,以解析出從字符串開始在特定字符串,並在該行的末尾結束文本的方式。如前所述,有很多方法可以做到這一點。這裏有一個...

egrep -o "DELIM.*" input

...其中 'DELIM' 是所需子。

+0

不完全 - 我正在尋找一個字符串開始在一個分隔符,並結束在字符串的結尾(當然,我可以假設\ n分隔符)。我已經添加了幾個例子來使我的問題更清晰。 – iliaden

+1

嗯,你的意思是你希望能夠從你的多字符分隔符開始直到行尾?如果是這樣,有多種不同的方式來做到這一點。這裏有一個,假設你的分隔符是'DELIM'... 'sed's /.* \(DELIM。* \)/ \ 1 /'輸入' – Costa

+0

不完全是 - 首先您假定字符串帶有「)」 - 雖然它可以是任何東西,第二,'無效的參考\'在'''命令的RHS'上 – iliaden

0

而且

awk -v delim="in" '{print substr($0, index($0, delim))}' 
0

這可以無需外部程序來完成。假設要處理的字符串是在$string和分隔符是DELIM

result=${string#"${string%%DELIM*}"} 

內部部分替代$string與一切從DELIM的第一次出現(如果有的話)中除去起始。然後外部部分從$string開始移除該值,從DELIM的第一次出現開始,或者如果沒有發生DELIM,則保留空字符串。 (變量string保持不變。)

+0

如何實現這個完全相反? – atefth

相關問題