我正在尝试使下面的命令工作,但没有打印o/p:
tail -f mylog.log | grep --line-buffered -Eo '<S:Envelope .+Envelope>' | xmllint --format --recover -
Run Code Online (Sandbox Code Playgroud)
但是,如果我从文件中grep相同的模式,并将其传递给xmllint,它的工作原理如下:
grep --line-buffered -Eo '<S:Envelope .+Envelope>' tmp.xml | xmllint --format --recover -
Run Code Online (Sandbox Code Playgroud)
我在第一个命令中缺少什么?
我目前正在使用以下代码行通过PowerShell返回最新的日志行
Get-Content -Path C:\folder\thisisalog.log -Tail 1 -Wait |
Where {$_ -match "Remote_http"}
Run Code Online (Sandbox Code Playgroud)
这可以正常工作,并且每次记录与"Remote_http"匹配的日志时都会写入控制台.
但是,我想要做的是在返回时运行另一个脚本.到目前为止,我已经尝试添加到一个变量并检查它是否为空而没有运气,我尝试使用if
语句但没有成功.尝试这两个脚本无限期地运行,没有输出到控制台或triigers.
我认为这可能与-Wait
导致问题的因素有关.
为什么String只有一个字母的尾部是空字符串而不是空列表?
例:
tail "a"
= ""
Run Code Online (Sandbox Code Playgroud)
但您可以创建一个String作为:
'a' : []
= "a"
Run Code Online (Sandbox Code Playgroud)
所以我认为尾巴应该是空列表[]
.
如果你这样做的话
tail ["x"]
Run Code Online (Sandbox Code Playgroud)
然后你得到空列表[]
.
这有点令人困惑.
我希望能够得到tail -F
一些输出,但不能让它回滚整个缓冲区,而只能在有限的行数(例如 5 行)内滚动。
我怎样才能做到这一点?
我试过
tail -F -n 5 /tmp/dump
但这似乎不起作用 - 滚动行占据了整个缓冲区
我正在编写一个脚本来监听日志文件的更改并采取适当的行动.目前我正在使用open my $fh, "tail -f $logfile |";
但理想情况下我不想使用系统调用.
我已经尝试过File :: Tail但它的最小间隔为1秒(我尝试传递较少,但默认为1秒,即使我传递0).我已经检查了它的来源,它似乎使用sleep(),它采用整数.在我尝试自己编写之前,还有其他选择吗?
谢谢.
你有任何bash解决方案从stdout中删除N行吗?
像'head'命令一样,打印所有行,只有最后一个N.
关于bash的简单解释:
找到./test_dir/ | sed'$ d'| sed'$ d'| sed'$ d'| ...
但我需要复制sed命令N次
更好的解决方案?除了awk,python等......
我想做以下事情:
获取输出free -mo
,取第二行并每30秒将其记录到一个文件中.
我跑的时候
$free -mo -s 30
Run Code Online (Sandbox Code Playgroud)
它每30秒运行并显示一次输出.
但是当我跑步的时候
$ free -mo -s 30 | head -2 | tail -1
Run Code Online (Sandbox Code Playgroud)
它只运行一次.我无法弄清楚出了什么问题.
free手册说free -s 30每隔30秒运行一次命令.
随着我们的SuSE Enterprise Linux 11的最新更新(现在是bash 3.2.51(1)-release),命令"tail"似乎已经失去了流文件的选项:
tail: unrecognized option '--line-buffered'
Run Code Online (Sandbox Code Playgroud)
我们的尾巴来自"GNU coreutils 8.12,2013年3月".还有另一种等效的解决方案吗?
在任何类型的服务中,在日志中搜索以下情况的最佳方法是什么:
1 - 如果错误已经发生。
2 - 如果错误被重现并且想要捕获发生的异常/错误。
我知道但效率低下的一些方法是:
tail -f production.log => log flows and you have to check manually.
tail -n1000 production.log => log for last 1000 lines
tail -f production.log | grep '500 Internal Server Error' => shows the flow of log for only one particular line that says 500.
我想打印日志上方的 100 行,以便在这两种情况下也打印回溯(尤其是第二行)。
我在shell脚本if语句中有tail
&问题grep
。如果我tail -5 mylog.log | grep -c "Transferred: 0"
在shell中运行,它将按预期运行,但是在此shell脚本中,如果if语句:
# Parse log for results
if [ tail -1 "$LOGFILE" | grep -c "Failed" ] ; then
RESULT=$(tail -1 "$LOGFILE")
elif [ tail -5 "$LOGFILE" | grep -c "Transferred: 0" ] ; then
RESULT=""
else
RESULT=$(tail -5 "$LOGFILE")
fi
Run Code Online (Sandbox Code Playgroud)
我懂了
... [: missing `]'
grep: ]: No such file or directory
Run Code Online (Sandbox Code Playgroud)
对于两个grep行。
显然,关闭]
被视为grep的一部分(因此丢失),但是我使用的是正确的空格,所以我不知道发生了什么?我在这里做错了什么?
谢谢,PJ
我知道tail函数返回列表的最后n-1个元素(其中n是列表的长度),所以我定义了自己的"cotail"函数来返回前n-1个元素:
cotail = (reverse . tail . reverse)
Run Code Online (Sandbox Code Playgroud)
这是最好的方法,还是有内置函数或更聪明的方法来实现这一目标?