awk命令用于打印变量的两个单词之间的文本

时间:2014-03-03 15:45:35

标签: bash shell unix awk solaris

我有一个变量如下

  

a =“我的名字是A.她的名字是B.他的名字是C”

我需要在“name”和“。”之间打印文本。

预期输出

is A
is B
is C

编辑:解决方案应该适用于Solaris和Linux计算机

3 个答案:

答案 0 :(得分:3)

这适用于GNU grep

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

这适用于带有/ usr / xpg4 / bin / awk

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

答案 1 :(得分:3)

使用awk:

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

答案 2 :(得分:2)

假设您在Solaris上有bash,则以下内容应该有效:

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

为了您的输入,它会产生:

is A
is B
is C