grep多行中的特定字符串

时间:2018-08-15 15:20:06

标签: bash shell awk sed grep

我有一个包含许多用户信息的文件。 例如 。

Name: firstname:jessica middlename:albert lastname:peters
phone: 872634823468
Mobile: 72364623646
Address: Apacrtment : CT APT , Road : MG Road , City : Mumbai
Job : Software developer.

Name: firstname:ram middlename:kishan lastname:pichai
phone: 3242342342
Mobile: 12343545435
Address: Apacrtment : Antop APT , Road : AT Road , City : Delhi
Job : Senior developer.

我想从特定行中复制特定值。 我可以使用egrep命令找到这些行。

例如

 egrep "Name|Mobile|Address" test.log
    Name: jessica albert peters
    Mobile: 72364623646
    Address: Apartment : CT APT , Road : MG Road , City : Mumbai

我怎样才能从上述各行中找出特定的字符串并将其保存为逗号分隔的值。 例如,我正在寻找

之类的输出
expected output
Name,Mobile,City
jessica,72364623646,Mumbai
ram,12343545435,Delhi

3 个答案:

答案 0 :(得分:1)

如果您的实际Input_file与所示示例相同,那么以下内容可能会对您有所帮助。

awk '
BEGIN{
  OFS=","
  print "Name,Mobile,City"
}
/^Name:/{
  sub(/.*:/,"",$2)
  val=$2
  next
}
/^Mobile/{
  val=val OFS $2
  next
}
/City/{
  match($0,/City : .*/)
  print val OFS substr($0,RSTART+7,RLENGTH-7)
  val=""
}'   Input_file

答案 1 :(得分:1)

您可以将此awk与空白的RS一起使用:

awk -v OFS=, -F ' *[,:] *|[[:space:]]+' -v RS= 'BEGIN{print "Name", "Mobile", "City"}
{print $3, $11, $20}' file

Name,Mobile,City
jessica,72364623646,Mumbai
ram,12343545435,Delhi

答案 2 :(得分:0)

考虑该文件,请遵循您显示的这种模式

以下命令可帮助您进行捕获:

名称:cat teste.txt | grep -e "Name" | awk -F" " '{ print $2 }' | awk -F":" '{ print $2 }'

手机:cat teste.txt | grep -e "Mobile" | awk -F " " '{ print $2 }'

地址:cat teste.txt | grep -e "Address" | awk -F"City : " '{ print $2 }'

在此之后,只需使用foreach循环即可将csv文件写入