如何提取在Shell腳本中匹配的模式之後出現的任何字符串。我知道Perl腳本中的這個功能,但我不知道在Shell腳本中。在Shell中的匹配模式之後提取字符串
以下爲例子,
Subject_01:這是一個示例主體,這可能會有所不同
我要提取下面的任何字符串 「Subject_01:」
任何幫助請。
如何提取在Shell腳本中匹配的模式之後出現的任何字符串。我知道Perl腳本中的這個功能,但我不知道在Shell腳本中。在Shell中的匹配模式之後提取字符串
以下爲例子,
Subject_01:這是一個示例主體,這可能會有所不同
我要提取下面的任何字符串 「Subject_01:」
任何幫助請。
這取決於你的shell。
如果您使用bourne殼或bash或(我相信)pdksh,那麼你可以做花哨的東西是這樣的:
$ 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編程。
謝謝......它工作得很漂亮...... :-) –
對於剪切,如果你只是想放下第一個字段(如果字符串的其餘部分有冒號),使用'-f2 -' –
@glennjackman - 真的,謝謝你指出。該符號將返回該行的其餘部分,甚至包括後續冒號周圍的空格,儘管它仍不會讓我們在開始時修剪空白。 – ghoti
你用的是什麼外殼?伯恩? CSH? KSH88? [RC(http://plan9.bell-labs.com/sys/doc/rc.html)? – Graham