是否可以通过简单的shell命令仅保留一行的最后10行?
tail -n 10 test.log
Run Code Online (Sandbox Code Playgroud)
提供正确的结果,但我不知道如何修改test.log本身.和
tail -n 10 test.log > test.log
Run Code Online (Sandbox Code Playgroud)
不起作用.
在*NIX中实现tail的有效方法是什么?我提出(写)两个简单的解决方案,都使用一种循环缓冲区将线加载到圆形结构(数组|双向链接循环列表 - 为了好玩).我在busybox中看到了部分较旧的实现,从我的理解,他们使用fseek找到EOF,然后"向后"阅读东西.那里有更清洁,更快的东西吗?我在面试时被问到这个问题并且提问者看起来并不满意.先感谢您.
我问了一个关于在PHP中弹出文本文件的最后一行的问题,现在,是否可以在shell脚本中重写逻辑?
我试过这个来获取最后一行:
tail -n 1 my_log_file.log
Run Code Online (Sandbox Code Playgroud)
但我不知道如何删除最后一行并保存文件.
PS给出我使用Ubuntu服务器.
使用bash进程替换,我想同时在文件上运行两个不同的命令.在这个例子中,没有必要,但想象"cat/usr/share/dict/words"是一个非常昂贵的操作,例如解压缩50gb文件.
cat /usr/share/dict/words | tee >(head -1 > h.txt) >(tail -1 > t.txt) > /dev/null
Run Code Online (Sandbox Code Playgroud)
在这个命令之后我希望h.txt包含单词文件"A"的第一行,并且t.txt包含文件"Zyzzogeton"的最后一行.
然而实际发生的是h.txt包含"A"但是t.txt包含"argillaceo",它大约是文件的5%.
为什么会这样?似乎要么"尾巴"进程提前终止,要么流正在混淆.
像这样运行另一个类似命令的行为符合预期:
cat /usr/share/dict/words | tee >(grep ^a > a.txt) >(grep ^z > z.txt) > /dev/null
Run Code Online (Sandbox Code Playgroud)
在这个命令之后,我希望a.txt包含所有以"a"开头的单词,而z.txt包含所有以"z"开头的单词,这正是发生的事情.
那么为什么这不适用于"尾巴",以及其他命令会不起作用?
我正在尝试使用websocket创建一个数据流到浏览器.数据是日志文件的输出.(tail -f filename)使用节点js,我已经设法登录到stdout,但我无法创建服务器并创建客户端(js/html)代码来创建websocket并接收所有输出这个孩子的过程.谁能帮我?
NODE.JS服务器输出TAIL到STDOUT(见http://snippets.dzone.com/posts/show/12067)
var sys = require('sys')
var spawn = require('child_process').spawn;
var filename = process.ARGV[2];
if (!filename)
return sys.puts("Usage: node <server.js> <filename>");
var tail = spawn("tail", ["-f", filename]);
sys.puts("start tailing");
tail.stdout.on("data", function (data) {
sys.puts(data);
});
Run Code Online (Sandbox Code Playgroud)
我的目标是让最简单的流可能.任何其他简单的解决方案都很受欢迎.谢谢.

阅读Rails日志vim,我们可以看到彩色日志.但是当我们使用tail -f或less观看日志时,它不再着色了.有没有办法看到的彩色日志,tail或者less还是什么?
我想从多个日志文件中获取一个模式,这些日志文件会被某些进程不断更新,并且会连续地延迟这个grep的输出.下面的命令不起作用,我得到
- tail:警告:无限期地遵循标准输入是无效的
tail -f | grep --line-buffered "Search this: " /var/links/proc2/id/myprocess*/Daily/myprocess*.log
Run Code Online (Sandbox Code Playgroud)
有人可以解决这个问题吗?
我猜这个网站上的大多数人都熟悉尾部,如果没有 - 它提供了一种"跟随"模式,当文本附加到文件尾部时会将这些字符转储到终端.
我正在寻找(并可能在必要时写自己)是一个适用于二进制文件的尾部版本.基本上我有一个无线链接,我想通过另一个网络链接来涓流文件.查看尾部源代码,重写起来并不难,但我宁愿不重新发明轮子!这不是严格意义上的"尾部",因为我希望整个文件被复制,但它会在新的字节被添加并流式传输时观察.
想法?
我想输出文件中a和b之间的所有行.
这有效但似乎有点矫枉过正:
head -n 900 file.txt | tail -n 100
Run Code Online (Sandbox Code Playgroud)
我缺乏unix知识似乎是这里的限制.有什么建议?
我在这里关注Michael Hartl的Rails教程:
http://ruby.railstutorial.org/chapters/modeling-and-viewing-users-one#top
我使用此命令在单独的窗口中跟踪SQL查询:
tail -f log/development.log
Run Code Online (Sandbox Code Playgroud)
但是,当我在沙盒rails控制台中时,日志不会使用SQL语句更新,而是显示在rails控制台中.我该如何纠正这种行为?
我应该补充一点,我的数据库迁移和对数据模型的更改(新表等)都反映在日志中.只有rails控制台内部方法传播的SQL语句才会被省略(而是显示在rails控制台中).
这是我的Gemfile:
source 'http://rubygems.org'
gem 'rails', '3.1.0'
# Bundle edge Rails instead:
# gem 'rails', :git => 'git://github.com/rails/rails.git'
gem 'sqlite3'
group :development do
gem 'rspec-rails', '2.6.1'
gem 'annotate', :git => 'git://github.com/ctran/annotate_models.git'
end
group :test do
gem 'rspec-rails', '2.6.1'
gem 'webrat', '0.7.3'
gem 'spork', '0.9.0.rc8'
gem 'guard-spork'
gem 'autotest', '4.4.6'
gem 'autotest-rails-pure', '4.1.2'
gem 'autotest-fsevent', '0.2.4'
gem 'autotest-growl', '0.2.9'
end
# Gems used only for assets and not required
# in production environments …Run Code Online (Sandbox Code Playgroud)