2

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

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

ETC。,

我想在“1”和“待定”(即name1)之间查找特定状态。

我试过这个命令

    var="1"

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

这不会返回任何东西。

4

4 回答 4

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  

这里仅显示 a1和 word 之前的匹配项Pending

注意:这是使用积极的lookahead 和lookbehind

于 2012-12-11T16:04:42.540 回答
0
    sed -n 's/^1\(.*\)Pending.*$/\1/gp'

你一开始有额外的斜线

于 2012-12-10T23:52:51.220 回答
0

解决方案怎么样?

awk '{for (i=1; i<=NF; i++) {if ($i == "Pending") {print $(i-1)}}}' input_file
于 2012-12-11T00:34:10.650 回答
0

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

var="1"

cat script.sh | sed -n "/^${var}.*Pending/{s/^${var}\(.*\)Pending.*$/\1/;p;}"
于 2012-12-11T15:56:46.740 回答