如何使用grep

时间:2016-06-03 04:13:28

标签: bash grep

我想问一下如何使用grep来提取下面这些粗体字:

主题:[打印] [ printer-tj ]

来自:John Smith< john.s@gmail.com >

收件人:print@gmail.com

Content-Type:text / html;字符集= UTF-8   Content-Transfer-Encoding:quoted-printable

内容类型: application / pdf ;名称="的 a.pdf "

例如,我想将这些单词存储到不同的变量中:

a = printer-tj

b = john.s@gmail.com

c = application/pdf

d = a.pdf

如何使用grep实现它?

据我所知,我可以这样使用,但我不确定这是否正确:

a = grep -Po 'Subject: [print][\K[^]]+'

2 个答案:

答案 0 :(得分:1)

我不确定您根据需要存储所有变量的目的是什么。但这是我的尝试: -

#!/bin/bash

a=$(grep -w "Subject:" file | awk '{print $2}' | sed 's/.*\[\([^]]*\)\].*/\1/g')

b=$(grep -w "From:" file | awk 'NR>1{print $1}' RS="<" FS=">")

c=$(grep -w "Content-Type:" file | awk 'NR>1{print}' | awk -F";" '{print $1}' | cut -d ":" -f2)

d=$(grep -w "Content-Type:" file | awk 'NR>1{print}' | awk -F";" '{gsub(/"/, "", $2); print $2}' | cut -d "=" -f2)

echo'到stdout时会产生输出。

printer-tj
john.s@gmail.com
application/pdf
a.pdf

答案 1 :(得分:1)

这个解决方案更简洁:

#!/bin/bash
awk 'BEGIN { FS="[\\[\\]<>\"; ]+" }
/^Subject:/ { a = $3; next; }
/^From:/ { b = $4; next; }
/^Content-Type:/ { c = $2; d = $4; next; }
END { print a, b, c, d; }' file | read a b c d