Shell 对于“;grep-b1&x201C;尽我所能’;t使用带-B的grep来获取o/p
MacOS上的我的grep不支持GNU grep的Shell 对于“;grep-b1&x201C;尽我所能’;t使用带-B的grep来获取o/p,shell,unix,grep,Shell,Unix,Grep,MacOS上的我的grep不支持GNU grep的-B count选项。我需要以下命令的替代选项: while read x; do find . -name \*$x\* -exec cat {} + | grep -i -B 1 "failed with status" done < x -B for grep在while循环中也可以正常工作。请重新检查您的文件中的格式 cat boo a test line failed with statu
-B count
选项。我需要以下命令的替代选项:
while read x; do
find . -name \*$x\* -exec cat {} + |
grep -i -B 1 "failed with status"
done < x
-B for grep在while循环中也可以正常工作。请重新检查您的文件中的格式
cat boo
a test line
failed with status
some random text
find . -name *b* -exec cat {} \; | grep -B 1 'failed with status'
a test line
failed with status
cat x
boo
while read x; do find . -name \*$x\* -exec cat {} + | grep -i -B 1 "failed with status" ;done < x
a test line
failed with status
猫咪
试车线
失败,状态为
一些随机文本
找到-名称*b*-exec cat{}\|grep-B 1“状态为失败”
试车线
失败,状态为
猫x
喝倒采
读x时;一定要找到-name\*$x\*-exec cat{}+|grep-i-b1“状态失败”;完成
试试awk
find . -name "*$x*" -exec cat {} + |
awk 'length(prev) != 0 && tolower($0) ~ /failed with status/{ print prev; print } { prev=$0 }'
我想也是sed
:
sed -n '1{h;b;}; H; y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/; /failed with status/{ x; p; s/.*//; n; h; b; }; x; s/[^\n]*\n//; x'
在评论中,您提到了问题的两条重要线索:
grep:非法选项--B用法:grep[-c |-l |-q]-bhinsvw模式文件
-i-B count
选项:
awk -v c=count -v s="failed with status" '
BEGIN{c=c+1}{a[FNR%c]=$0}
(tolower($0) ~ s){
for(i=(FNR>c)*(FNR-c)+1;i<=FNR;++i) print a[i%c]; print "--"
}'
可以将循环简化为单个
awk
(standadr Linux awk/gawk)命令,如下所示:
while read x; do
awk 'BEGINFILE{l = ""} /failed with status/{print FILENAME": "l RS $0}{l = $0}' $(find -name "*$x*")
done < x
awk
脚本说明
错误:grep:非法选项--B用法:grep[-c |-l |-q]-bhinsvw模式文件。请将您的评论中的信息移动到问题中。完成-B1和-B1都被试过,但有点相同。请将前两条评论中的信息移到问题中。您提到您在服务器上运行此操作系统,服务器的操作系统是什么?@Misrtyvib我已编辑了我的答案。我怀疑一定有一些非空白字符“B”和grep。手动输入整个grep命令怎么样?也许他的grep不支持-B?最好了解操作系统.OS-macOSMojave@Jens-B选项未在man grep下预设…这对我来说是一场灾难…有其他选择吗?@Misrtyvib check Sed不起作用-只有AWk可以工作-我猜如何添加前5行-这不是标准的AWk,而是一个简单的GNU AWk,它包含扩展。由于OP表明他不能使用GNU grep,因此他是否能使用GNU awk似乎值得怀疑。这也没有给出相同的预期结果。这会重置每个文件的所有内容,而OP只希望看到所有文件组合的cat输出。这两个注释都是正确的
gawk
是Linux机器中的标准配置。并在每个文件上重置测试。用户可以删除节BEGIN{l=”“}
,其行为类似于单个文件的cat
。@Misrtyvib我已经更新了脚本。如果它不起作用,你的脚本就会有问题。
awk '(tolower($0)~/failed with status/){print (FNR>1?p ORS:"") $0}{p=$0}'
while read x; do
awk 'BEGINFILE{l = ""} /failed with status/{print FILENAME": "l RS $0}{l = $0}' $(find -name "*$x*")
done < x
while read x; do
awk 'BEGINFILE{l = ""} /[fF][aA][iI][lL][eE][dD] [wW][iI][tT][hH] [sS][tT][aA][tT][uU][sS]/{print FILENAME": "l RS $0}{l = $0}' $(find -name "*$x*")
done < x
BEGINFILE {previusLine = ""} # On file reading start, reset variable previusLine
/failed with status/ # On lines mathching regex pattern "failed with status"
{
# print filename prefix + previousLine + newline + current line
print FILENAME ": " previusLine RS $0;
}
{ # On each line
previusLine = $0; # save the current line into variable previusLine
}