2014-03-03 47 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