Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux grep与特殊字符之间的打印_Linux_Text_Grep - Fatal编程技术网

Linux grep与特殊字符之间的打印

Linux grep与特殊字符之间的打印,linux,text,grep,Linux,Text,Grep,这就是我的数据的外观 ----------------------------------------------------------------------------------------------------------------------------------------------------------------- date start stop durat cond acc_5 acc_6 dialled_number o

这就是我的数据的外观

-----------------------------------------------------------------------------------------------------------------------------------------------------------------
date        start     stop      durat  cond  acc_5  acc_6  dialled_number   outg_trunk  connected_num    inc_trunk   calling_num      charged_num      ring  que
60512-09-56  66:65:99  66:90:65  0081212  NI                  90000                        912690            0050060055  56012975125        56012975125        8     0
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
date        start     stop      durat  cond  acc_5  acc_6  dialled_number   outg_trunk  connected_num    inc_trunk   calling_num      charged_num      ring  que
60512-09-56  66:67:59  66:95:55  00955  I                   900012                        9120512            0700050005  901299120512        901299120512        0     0
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
date        start     stop      durat  cond  acc_5  acc_6  dialled_number   outg_trunk  connected_num    inc_trunk   calling_num      charged_num      ring  que
60512-09-56  66:67:60  66:95:55  009512  NJ                  90009            5000060069  05055                        9120512            912999            5     0

endpoint                endp_type     codec_5     codec_6     cum_pack_lost  pack_lost  frac_lost   mean_delay  worst_delay  mean_jitter  worst_jitter  R-value
50.9.0.56:57696         a_multiLim    PCMA                    0              0          0          0           65           0            0             996
-----------------------------------------------------------------------------------------------------  ------------------------------------------------------------
这只是数据的一个示例,它包含数千行这样的行。我想找到包含例如“900012”的数据

所以我明白了


我知道我可以写“cat file.txt | grep 900012-A1-B1”,但有些行比上面1行多,下面1行少。那么,有没有一种方法可以告诉grep打印这些行,直到它在上面和下面碰到“----”,然后停止


我可以用python或bash简单地实现这一点。但是我正在寻找一个可以粘贴到bash中的单行代码,因为我会在数百个系统中使用它。并且不想将文件等复制粘贴到每个系统。

这可能是使用
awk
的一种方法:

awk '/^--/ { if (f) {print line} {f=0; line=""; next}}
     /900012/ {f=1}
     {if (line) {line=line RS $0} else {line=$0}}' file
解释
  • /^-/{如果(f){print line}{f=0;line=“”;next}}
    在以
    --
    开头的行中,它检查是否设置了标志
    f
    。如果是,则打印缓冲数据。然后它取消设置
    f
    ,清空缓冲行并跳到下一行
  • /900012/{f=1}
    如果行匹配
    900012
    ,则触发标志
    f
  • {if(line){line=line RS$0}else{line=$0}}
    在任意一行,缓冲变量
    line
    中的内容
对于您的示例输入,它返回:

$ awk '/^--/ { if (f) {print line} {f=0; line=""; next}} /900012/ {f=1} {if (line) {line=line RS $0} else {line=$0}}' file
date        start     stop      durat  cond  acc_5  acc_6  dialled_number   outg_trunk  connected_num    inc_trunk   calling_num      charged_num      ring  que
60512-09-56  66:67:59  66:95:55  00955  I                   900012                        9120512            0700050005  901299120512        901299120512        0     0
$ awk '/^--/ { if (f) {print line} {f=0; line=""; next}} /900012/ {f=1} {if (line) {line=line RS $0} else {line=$0}}' file
date        start     stop      durat  cond  acc_5  acc_6  dialled_number   outg_trunk  connected_num    inc_trunk   calling_num      charged_num      ring  que
60512-09-56  66:67:59  66:95:55  00955  I                   900012                        9120512            0700050005  901299120512        901299120512        0     0