我想问一下如何使用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[^]]+'
答案 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