2012-05-15 93 views
2

如何提取在Shell腳本中匹配的模式之後出現的任何字符串。我知道Perl腳本中的這個功能,但我不知道在Shell腳本中。在Shell中的匹配模式之後提取字符串

以下爲例子,

Subject_01:這是一個示例主體,這可能會有所不同

我要提取下面的任何字符串 「Subject_01:」

任何幫助請。

+0

你用的是什麼外殼?伯恩? CSH? KSH88? [RC(http://plan9.bell-labs.com/sys/doc/rc.html)? – Graham

回答

3

這取決於你的shell。

如果您使用殼或或(我相信),那麼你可以做花哨的東西是這樣的:

$ string="Subject_01: This is a sample subject and this may vary" 
$ output="${string#*: }" 
$ echo $output 
This is a sample subject and this may vary 
$ 

注意,這是相當的格式條款的限制。上面的行要求你在冒號後有一個空格。如果你有更多,它會填充$output的開頭。

如果你使用一些其他的殼,你可能不得不做這樣的事情,與cut命令:

> setenv string "Subject_01: This is a sample subject and this may vary" 
> setenv output "`echo '$string' | cut -d: -f2`" 
> echo $output 
This is a sample subject and this may vary 
> setenv output "`echo '$string' | sed 's/^[^:]*: *//'`" 
> echo $output 
This is a sample subject and this may vary 
> 

第一個示例使用cut,這是非常小的,簡單的。第二個例子使用sed,它可以做得更多,但是在CPU方面則稍微重一點。

YMMV。在csh中可能有更好的方法來處理這個問題(我的第二個例子使用tcsh),但是我在Bourne中完成了大部分的shell編程。

+0

謝謝......它工作得很漂亮...... :-) –

+0

對於剪切,如果你只是想放下第一個字段(如果字符串的其餘部分有冒號),使用'-f2 -' –

+0

@glennjackman - 真的,謝謝你指出。該符號將返回該行的其餘部分,甚至包括後續冒號周圍的空格,儘管它仍不會讓我們在開始時修剪空白。 – ghoti