我想知道如何在文件的每一行上为特定字段设置grep。我不想为一个模式grep整行。
e.g。
33 >> sender1 >> recipient2 >> subject vvv
33 >> sender2 >> recipient2 >> subject aaa
22 >> sender1 >> recipient3 >> subject ccc
22 >> sender1 >> recipient3 >> subject xxx
谢谢!
答案 0 :(得分:5)
“grep”:
awk -F'>>' '$3~/yourPattern/||$2~/yourPattern/' file
收件人和发件人:
{{1}}
答案 1 :(得分:4)
使用awk
代替grep
,用于搜索发件人提交的
$ awk '$3 ~ /sender/ { print }' filename.txt
用于搜索发件人和收件人
$ awk '$3 ~ /sender2/ || $5 ~ /recipient2/ { print }' filename.txt
字段由空格分隔。您可以按awk -F">>" '$3 ~ /sender/ { print }' filename.txt
添加自定义分隔符。您可以通过替换AND,OR
和|| for OR
逻辑来使用&& for AND
中的条件。
答案 2 :(得分:0)
已发布内容的变体:
awk -F' *>> *' '$3=="recipient2"'
这会将Field Separator设置为更有用的东西,因为它包含空格。现在recipient20
将无法匹配。您可以通过包含^
和“$ , or
> and
\ _<``等锚点来阻止这些错误匹配,但测试相等性通常会更容易。
以下是对第二个字段的测试,在第一个变体中,如果两者中的任何一个匹配,则打印该行,在第二个字段中,当满足两个条件时:
awk -F' *>> *' '$3=="recipient2" || $2=="sender1"'
awk -F' *>> *' '$3=="recipient2" && $2=="sender1"'
答案 3 :(得分:0)
awk很好,但对于非awk用户来说,以下内容可能更直观。
收件人字段:
cut -d'>' -f5 filename | grep searchString
发件人和收件人字段:
cut -d'>' -f3,5 filename | grep searchString
但你确实失去了剩下的部分。