Grep多个文本文件,每个文件输出在新行中

时间:2019-03-09 12:39:17

标签: search sed command-line grep

我有4个文本文件,其中包含以下内容:

text1.txt

<a data-role="sku" data-code="1">
      ...
<a data-role="sku" data-code="2">

text2.txt

<a data-role="sku" data-code="19">
      ...
<a data-role="sku" data-code="48">
<a data-role="sku" data-code="93">

text3.txt

this file text not have any date-code

text4.txt

<a data-role="sku" data-code="333">
<a data-role="sku" data-code="444">

我如何使用 grep 获得这样的输出

我希望每个文本文件以新行输出,如果文本文件不完全匹配,则将替换为

1,2
19,48,93
NO
333,444

我尝试这个grep -oP '(?<="data-code":")[^"]*' text* 但我得到这样的结果:

1
2
19
48
93
333
444

1 个答案:

答案 0 :(得分:0)

请尝试以下操作(如果您对nvtop感到满意):

awk

输出如下。

awk -F'[",]' '
BEGIN{
  OFS=","
}
FNR==1{
  if(val){
     print val
  }
  val=""
}
/Code/{
  val=(val?val OFS:"")$(NF-2)
}
END{
  if(val){
     print val
  }
}' *.txt


编辑: :由于OP在注释中更改了Input_file的样式,因此请按现在对其进行编辑。

1,2
7,9,14


EDIT2: :根据OP的注释,OP需要为没有找到匹配项的Input_file打印awk -F'"' ' BEGIN{ OFS="," } FNR==1{ if(val){ print val } val="" } /data-code/{ val=(val?val OFS:"")$2 } END{ if(val){ print val } }' *.txt ,然后可能会有所帮助。

NO