我需要在匹配Protectedfor52weeks或Protectedfor365days后打印剩下的一列的值。以下是我的行
completed Protectedfor52weeks failed Protectedfor365days
对于上述行,所需的输出如下
completed failed
答案 0 :(得分:1)
grep with lookahead
integer64
检查所有行上的一个或两个匹配。
答案 1 :(得分:0)
继续评论,您可以使用grep
和扩展正则表达式匹配,或使用sed
和后退参考来执行此操作,简单的方法是将其读入数组,并在迭代数组时进行简单测试:
#!/bin/bash
line="completed Protectedfor52weeks failed Protectedfor365days"
array=( $line )
for ((i = 0; i < ${#array[@]}; i++)); do
if [[ (${array[i]} == Protectedfor52weeks || \
${array[i]} == Protectedfor365days) && \
$i -lt $((${#array[@]} - 1)) ]]; then
echo ${array[$((i+1))]}
fi
done
示例使用/输出
$ bash weeks.sh
failed
答案 2 :(得分:0)
awk
;迭代字段并在任何所需单词之前打印字段:
awk '{for(i=1; i<=NF; ++i) if ($i ~ /^Protectedfor(52weeks|365days)$/) print $(i-1)}'
示例:强>
% awk '{for(i=1; i<=NF; ++i) if ($i ~ /^Protectedfor(52weeks|365days)$/) print $(i-1)}' <<<'completed Protectedfor52weeks failed Protectedfor365days'
completed
failed