我有一个文件“ Log.txt”,如下所示:
bla bla.. line1
bla bla.. line2
bla bla.. lineN
:000000 ... 239e670... A bla1.txt
:000000 ... 76fd777... M bla2.txt
:000000 ... e69de29... A bla3.txt
假设我正在寻找字母“ A”和“ M”。
我将如何只在仅包含此特定字母的第4个字段或行中查找它。我只需要匹配单词“ A”和“ M”,然后打印文件名。即我需要得到如下的最终输出:
A bla1.txt
M bla2.txt
A bla3.txt
我用awk将第4列与A和M匹配,并打印下一个单词。但没有得到预期的输出。我也得到了额外的Bla Bla线。
任何人都知道如何使用sed实现这一目标吗?
答案 0 :(得分:1)
awk
:
awk '$4 ~ /^[AM]$/ { print $4," ",$5 }' Log.txt
sed
:
sed -En '/^([^ ]+ ){3}[AM]/ { s/^([^ ]+ ){3}([AM] .*)/\2/; p; }' Log.txt
这两项都确认A
或M
在第4字段中。
答案 1 :(得分:0)
Awk实际上可以完成您的工作,只需添加一个条件:
awk "/ (A|M) /{print $4,$5}" Log.txt
对于sed,您可以执行以下操作:
sed -nr "/ (A|M) /{s/.*((A|M)\s+.*)$/\1/;p}" Log.txt
不确定您的真实数据是什么样子,但我想您会明白并调整命令以适合它们的。
答案 2 :(得分:0)
根据您的输入文件和预期的输出,请在下面使用awk
进行尝试:
awk '{if ($4 == "A" || $4 == "M") {print $4,$5}}' log.txt
输出:
A bla1.txt
M bla2.txt
A bla3.txt
答案 3 :(得分:0)
这可能对您有用(GNU sed):
sed 's/^\(\S*\s\)\{3\}\([AM]\s\)/\2/p;d' file
将第四个字段匹配为A
或M
,如果是,则删除前三个字段并打印其余字段。