sed grep两种模式之间的字符串

时间:2012-12-10 23:48:48

标签: bash shell sed grep

我在文件script.sh中有一个表达式列表,如

    1  name1  Pending    flag0
    2  name2  Completed  flag1
    3  name3  Completed  flag-

等,

我想grep“1”和“pending”之间的具体状态(即name1)。

我试过这个命令

    var="1"

    cat script.sh |sed -n "s/^${var}\(.*\)Pending.*$/\1/gp"

这不会返回任何内容。

4 个答案:

答案 0 :(得分:2)

使用grep -Po '(?<=1).*(?=Pending)' file

进行此操作
$ cat file
    1  name1  Pending    flag0
    2  name2  Completed  flag1
    3  name3  Completed  flag-

$ grep -Po '(?<=1).*(?=Pending)' file
  name1  

此处仅显示1后面的匹配项,并位于单词Pending之前。

注意:这是使用positive lookahead and lookbehind

答案 1 :(得分:0)

    sed -n 's/^1\(.*\)Pending.*$/\1/gp'

你在开头有额外的斜线

答案 2 :(得分:0)

解决方案怎么样?

awk '{for (i=1; i<=NF; i++) {if ($i == "Pending") {print $(i-1)}}}' input_file

答案 3 :(得分:0)

您的解决方案只需稍作修改即可:

var="1"

cat script.sh | sed -n "/^${var}.*Pending/{s/^${var}\(.*\)Pending.*$/\1/;p;}"