检查下一行是否以AND开头



我有一段时间使用if条件来检查我的行是否以特定字符串开头:

while read line; do
# reading each line
if [[ $line == P0* ]]
then
echo $line
fi

我想添加一个条件以确保在我的";P0*";行不包含特定字符串:;PIC S9";。

例如:

P00001     05 ID-TECH-DPR
PIC S9(9) COMP.
P00005     05 ID-TECH-INDV
PIC S9(9) COMP.
P00009     05 CO-REG-LIQ PIC X(1).
P00010     05 NO-INST-LIQ PIC X(3).
P00013     05 NO-ORD-DPR

我需要我的输出是:

P00009     05 CO-REG-LIQ PIC X(1).
P00010     05 NO-INST-LIQ PIC X(3).
P00013     05 NO-ORD-DPR

代替:

P00001     05 ID-TECH-DPR
P00005     05 ID-TECH-INDV
P00009     05 CO-REG-LIQ PIC X(1).
P00010     05 NO-INST-LIQ PIC X(3).
P00013     05 NO-ORD-DPR

我会用AWK来做。尝试:

#!/bin/bash
awk '
(s != ""){if ($0 !~ /PIC S9/) {print s}; s=""}
/^P0/{s=$0}
' srce

假设文件srce包含:

P00001     05 ID-TECH-DPR
PIC S9(9) COMP.
P00005     05 ID-TECH-INDV
PIC S9(9) COMP.
P00009     05 CO-REG-LIQ PIC X(1).
P00010     05 NO-INST-LIQ PIC X(3).
P00013     05 NO-ORD-DPR

除非您实际上出于其他原因需要寻址bash中的每一行,否则只需执行

grep ^P0 my-file | grep -v '^[[:space:]]*PIC S9'

或者在awk中,你可以做同样的事情,但也可以在awk:中寻址每一行

awk '/^P0/ && !/^[[:space:]]*PIC S9/' my-file

在bash中,您可以添加第二个测试,但bash-regex速度较慢:

if [[ $line == P0* && ! $line =~ ^[[:space:]]*PIC S9 ]]
then

相关内容

最新更新