我在文件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"
这不会返回任何内容。
答案 0 :(得分:2)
使用grep: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
此处grep仅显示1
后面的匹配项,并位于单词Pending
之前。
答案 1 :(得分:0)
sed -n 's/^1\(.*\)Pending.*$/\1/gp'
你在开头有额外的斜线
答案 2 :(得分:0)
awk解决方案怎么样?
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;}"