2014-03-03 44 views
0

兩個詞之間我有一個變量如下awk命令打印文本呈現的變量

一個=「我的名字是A.她的名字叫B.他的名字叫C」

我需要在「名稱」和「。」之間打印文本。

預期輸出爲

is A 
is B 
is C 

編輯:解決方案應在Solaris和Linux機器工作都

回答

3

這適用於GNU的grep

$ grep -ioP '(?<=name).+?(?=\.|$)' <<< "$a" 
is A 
is B 
is C 

這適用於在Solaris 5.8 with/usr/xpg4/bin/awk

$ echo "$a" | awk -F '[nN]ame |\\.' '{for (i=2; i<=NF; i+=2) print $i}' 
is A 
is B 
is C 
+0

在solaris中它說'grep:非法選項 - o grep:非法選項-P 用法:grep -hblcnsviw模式文件。 。 。 ' – logan

+0

[nN]是什麼意思? – logan

+1

這是一個正則表達式括號表達式,意思是:匹配「n」或「N」 –

3

用awk:

echo "$a"|awk -F '[nN]ame ' '{print $2}' RS='.' 
is A 
is B 
is C 
+2

+1,很好的使用RS –

+0

,但我可能有除點之外的第二個字符串。此示例僅供參考 – logan

+0

@logan:您可以在'RS'開關中使用任何其他文本。 – anubhava

2

假設你有在Solaris bash,下面應該工作:

while read -r l; do 
    echo "${l//*[Nn]ame /}"; 
done < <(tr '.' '\n' <<< "$a") 

您的輸入,它會產生:

is A 
is B 
is C