需要帮助bash脚本的一部分,它需要找到一个特定的模式字符串。下面给出了一个示例字符串:
Lazy<T>
cat file | sed -n'/ %% IF /,/ %% ENDIF / p'
//*-----------
//* %%SET %%ABC = %%BLANK
//* %%SET %%RESTART = %%BLANK7
//* %%SET %%DANGO= 236985
//*-----------
//* %%IF %%ODATE EQ 123456
//* %%SET %%ABC= GSG34
//* %%SET %%RESTART = RESTART
//* %%ENDIF
//*-----------
//* %%IF %%ODATE EQ 463123
//* %%SET %%DANGO= 236985
//* %%ENDIF
//*-----------
//* %%IF %%ODATE EQ 15641
//* %%SET %%RESTART = %%BLANK7
//* %%ENDIF
//*-----------
我只需要找到以下内容:
//* %%IF %%ODATE EQ 123456
//* %%SET %%ABC= GSG34
//* %%SET %%RESTART = RESTART
//* %%ENDIF
//* %%IF %%ODATE EQ 463123
//* %%SET %%DANGO = 236985
//* %%ENDIF
//* %%IF %%ODATE EQ 15641
//* %%SET %%RESTART = %%BLANK7
//* %%ENDIF
我怎么能这样做?
答案 0 :(得分:0)
您可以使用以下awk
命令:
awk '/%%ODATE EQ 123456/{p=1}/ENDIF/&&p{p=0;print}p' file
输出:
//* %%IF %%ODATE EQ 123456
//* %%SET %%ABC= GSG34
//* %%SET %%RESTART = RESTART
//* %%ENDIF
当变量awk
为真时,p
基本上会在此处打印一行。当行 ODATE EQ 123456 出现时,p
将设置为,并在下一个 ENDIF 上重置。 ENDIF 本身也会打印出来。
按照下面的评论,您可以使用此命令:
awk '/IF/&&/ABC/&&/RESTART/' RS='\n//\\*---+\n'
此处的关键是记录分隔符 RS
。
答案 1 :(得分:0)
使用sed:
sed -n '/%%IF /{:a;N;/%%ENDIF/!ba;/ODATE/{/ABC/{/RESTART/p;}}}' file