我想问一下如何使用 grep 提取下面的这些粗体字:
主题: [打印][打印机-tj]
寄件人:约翰·史密斯 <<strong>john.s@gmail.com>
收件人: print@gmail.com
内容类型:text/html;charset=UTF-8 内容传输编码:带引号可打印
内容类型:应用程序/pdf;名称="a.pdf"
例如,我想将这些单词存储到不同的变量中:
a = printer-tj
b = john.s@gmail.com
c = application/pdf
d = a.pdf
如何使用 grep 实现它?
据我所知,我可以这样使用,但我不确定这是否正确:
a = grep -Po 'Subject: [print][K[^]]+'
这个解决方案更简洁一些:
#!/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
不确定您根据需要存储所有变量的目的是什么。但我的尝试是这样的:-
#!/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
到标准输出时产生输出。
printer-tj
john.s@gmail.com
application/pdf
a.pdf