shell中实时去除回车

2024-03-09

对于上下文,我尝试创建一个 shell 脚本来简化 ffmpeg 的实时控制台输出,仅显示正在编码的当前帧。我的最终目标是在某种进度指示器中使用此信息进行批处理。

对于那些不熟悉 ffmpeg 输出的人来说,它将编码的视频信息输出到 stdout,将控制台信息输出到 stderr。此外,当它实际开始显示编码信息时,它使用回车符来防止控制台屏幕被填满。这使得不可能简单地使用 grep 和 awk 来捕获适当的行和帧信息。

我尝试的第一件事是使用 tr 替换回车符:

$ ffmpeg -i "ScreeningSchedule-1.mov" -y "test.mp4" 2>&1 | tr '\r' '\n'

其工作原理是将实时输出显示到控制台。但是,如果我随后将该信息传输到 grep 或 awk 或其他任何内容,tr 的输出将被缓冲并且不再是实时的。例如:$ ffmpeg -i "ScreeningSchedule-1.mov" -y "test.mp4" 2>&1 | tr '\r' '\n'>log.txt导致文件立即填充一些信息,然后 5-10 秒后,更多行被放入日志文件中。

起初我认为 sed 非常适合这样做:$ # ffmpeg -i "ScreeningSchedule-1.mov" -y "test.mp4" 2>&1 | sed 's/\\r/\\n/',但它会到达包含所有回车符的行,并等到处理完成后再尝试执行任何操作。我认为这是因为 sed 是逐行工作的,并且需要在执行其他操作之前完成整行,然后它无论如何都不会替换回车符。我已经尝试了各种不同的正则表达式用于回车符和换行符,但尚未找到替代回车符的解决方案。我运行的是 OSX 10.6.8,所以我使用的是 BSD sed,这可能是这个原因。

我还尝试将信息写入日志文件并使用tail -f读回来,但我仍然遇到实时替换回车符的问题。

我已经看到 python 和 perl 中有这个问题的解决方案,但是,我不愿意立即走这条路。首先,我不懂python或perl。其次,我有一个功能齐全的批处理 shell 应用程序,我需要对其进行移植或弄清楚如何与 python/perl 集成。可能并不难,但不是我想要进入的,除非我绝对必须这样做。所以我正在寻找一个 shell 解决方案,最好是 bash,但任何 OSX shell 都可以。

如果我想要的根本无法实现,那么我想当我到达那里时我会跨过那座桥。


如果这只是管道之后接收应用程序的输出缓冲问题。然后你可以尝试使用gawk(和一些 BSD awk)或mawk它可以刷新缓冲区。例如,尝试:

... | gawk '1;{fflush()}' RS='\r\n' > log.txt

或者,如果您的 awk 不支持此功能,您可以通过重复关闭输出文件并附加下一行来强制执行此操作...

... | awk '{sub(/\r$/,x); print>>f; close(f)}' f=log.out

或者你可以只使用 shell,例如bash:

... | while IFS= read -r line; do printf "%s\n" "${line%$'\r'}"; done > log.out
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

shell中实时去除回车 的相关文章

  • Bash:执行命令时超时/文件溢出终止

    我正在用 bash 编写一个模拟评分脚本 它应该执行一个 C 程序 该程序将给出一些输出 我将其重定向到一个文件 我试图 1 使其在一定持续时间后超时 并且 2 如果输出文件到达某个文件则终止尺寸限制 不知道如何解决这两个问题 有什么帮助吗
  • 使用 sed 删除带有方括号和引号的模式

    如何使用 sed 删除具有此模式的行 resourceNames I tried sed i resourceNames d sa yaml 文件的一部分看起来像这样 apiGroups resources secrets resource
  • 如何在 grep 中每个文件匹配一次?

    是否有任何 grep 选项可以让我控制匹配总数 但在每个文件的第一个匹配处停止 Example 如果我这样做grep ri include coffee re 我明白了 app coffee express require express
  • 如何在 Bash 脚本中回答“是”

    有一个快速的问题 想象一下我有这样的代码 mkdir p INSTALLDIR sudo apt get install y git clojure leiningen git clone git github com maltoe sto
  • Linux Bash - 日期格式

    我的日期格式是 yyyy mm dd hh mm ss 如何检查我的输入 它应该是这样的 bin bash read p Date format yy mm dd HH MM SS input check date Y m d H M S
  • 如何在 Mac OS X 中通过给出进程名称来获取进程的 PID?

    我正在编写一个脚本来监视任何给定进程的 CPU 和 MEM 为此 我需要将要监视的进程的名称作为命令行参数发送 例如 monitorscript
  • 如何让 Rscript 在非交互式 bash 模式下返回状态代码

    我正在尝试以 bash 脚本的形式从以非交互方式运行的 Rscript 中获取状态代码 此步骤是较大数据处理周期的一部分 其中涉及 db2 脚本等 所以我在脚本sample sh中有以下内容 Rscript verbose no resto
  • 如何防止 Conda 默认激活基础环境?

    我最近在我的 Mac 上安装了 anaconda2 默认情况下 Conda 配置为在我打开新的终端会话时激活基本环境 我想要访问 Conda 命令 即我想要将 Conda 的路径添加到我的 PATHConda 在初始化时会执行此操作 所以没
  • 为什么我不能将 Unix Nohup 与 Bash For 循环一起使用?

    例如 此行失败 nohup for i in mydir fasta do myscript sh i done gt output txt bash syntax error near unexpected token do 正确的做法是
  • npx:shell-auto-fallback 参数已被删除

    老实说 我不记得我最后在我的机器上安装了什么 我相信它正在酝酿 gatsby cli 无论如何 从昨天早上开始 当我打开新实例或重置终端 打开新选项卡 源 zshrc 等 时 我的终端一直给出以下错误 Last login Tue Nov
  • grep 以特定字符串开头的行

    我想找到文件中以特定字符串开头的所有行 问题是 我事先不知道字符串里有什么 该值存储在变量中 天真的解决方案如下 grep my string file txt 因为如果 Bash 变量my string包含任何正则表达式特殊字符 grep
  • 移动除一个文件之外的所有文件

    如何移动除一个文件之外的所有文件 我正在寻找类似的东西 mv Linux Old Tux png Linux New 我将旧的东西移动到新的东西文件夹中 除了Tux png 符号代表否定 有一些工具可以完成这项工作吗 如果您使用 bash
  • python中的多服务器监控/自动重启

    我有 2 个服务器程序 必须使用 GNU Screen 启动 我想使用基于 Python 的程序来强化这些服务器 防止崩溃 该程序启动每个屏幕会话 然后监视服务器进程 如果服务器进程崩溃 我需要 python 代码来终止无关的屏幕会话并再次
  • 使用 Bash 显示进度指示器(旋转器)[重复]

    这个问题在这里已经有答案了 使用仅 bash 的脚本 如何提供 bash 进度指示器 例如 当我从 bash 运行命令时 当该命令正在执行时 让用户知道某些事情仍在发生 在这个使用 SCP 的示例中 我演示了如何获取进程 ID pid 然后
  • 删除所有出现的重复行

    如果我想删除某些字段重复的行 那么我使用 sort u k n n 但这仍然发生一件事 如果我想删除所有出现的重复项 有没有快速的 bash 或 awk 方法可以做到这一点 例如我有 1 apple 30 2 banana 21 3 app
  • Shell脚本通过curl调用API并处理响应

    我需要创建一个通过curl 调用我的登录API 的shell 脚本 该脚本应该能够存储和处理来自curl api 调用的响应 myscript sh bin bash echo Extract bearer token from curl
  • 使用环境变量将参数传递给命令

    我正在尝试编写一个 bash 脚本 该脚本采用环境变量并将其传递给命令 所以如果我有类似的东西 export OUT a arg1 b arg2 0 arg2 1 我想在我的 bash 脚本中执行以下操作
  • 使用 ffmpeg 在一个音频文件中实现多个淡入/淡出效果

    我在向一个音频文件添加多种淡入淡出效果时遇到一些问题 当我尝试使用这样的命令时 ffmpeg y i home user video test sound mp3 af afade t in ss 0 d 3 afade t out st
  • 过滤 stderr 并获取初始返回代码

    在 shell 脚本中 我必须运行一个命令 我需要确定返回码是什么 但事实证明该命令的输出会发送到 stderr 并且还会输出用户的密码 不幸的是 这是命令的一个参数 不好 我知道 我至少想过滤掉密码 使其不被显示回来 cmd OPTION
  • 从外部 bash 设置环境变量

    我试图使用 PHP 从命令行 设置 bash 环境变量 但没有成功 buff array buff VARTESTKEY VARTESTVALUE buff export VARTESTKEY file put contents scrip

随机推荐

  • RSA可以同时用作加密和签名吗?

    抱歉 我的脑子突然空白了 编辑 场景 如果我想要信息绕过简单的过滤器 例如f ck 用公钥加密信息 用私钥签名可以吗 公钥可能已经被双方交换过了 而且公钥也很难得到 EDIT 2 这些信息本身可能并没有那么大的凭据 加密和签名的目的是为了绕
  • Android 4.3/4.4 上 Google PhotoSphere 背后的算法

    Android 4 3 4 4上的相机应用程序在 球形模式 下可以将不同方向的照片拼接成一张球形全景图 质量非常好 结果说明 http i cdn phonearena com images articles 73441 image goo
  • 烧瓶生产开发模式

    我用flask开发了一个应用程序 我想将其发布用于生产 但我不知道如何在生产和开发环境 数据库和代码 之间进行分离 您有文档来帮助我或代码吗 我在config py文件中指定了两个环境但我不知道如何使用 class DevelopmentC
  • 使用字符串变量加载图像(需要)不起作用

    需要带有字符串变量的图像不起作用 working var texture require images imag 01 jpg doesn t work path images imag 01 jpg var texture require
  • android post 问题,为什么我收到“没有主机路由”

    有人可以帮助我吗 打电话时HttpResponse response client execute request 它抛出一个IOException 这表明 没有到主机的路由 HttpClient client new DefaultHtt
  • Chrome 扩展:webRequest 重定向到现有选项卡,无需打开新选项卡

    当用户打开某个页面时 我想在打开新选项卡之前在现有选项卡中打开该页面 我尝试过 webRequest chrome webRequest onBeforeRequest addListener function details chrome
  • 如何构建 std::vector 然后对它们进行排序?

    我有一堆字符串需要排序 我认为 std vector 将是最简单的方法 但是 我以前从未使用过向量 因此需要一些帮助 我只需要按字母数字对它们进行排序 没什么特别的 事实上 string compare 函数可以工作 之后 我如何迭代它们以
  • 如何正确设置 Angular2 路由中的应用程序上下文路径?

    我使用 angular cli 创建了一个 Angular 项目 版本 1 0 0 beta 28 3 我使用 npm start 在开发环境中运行应用程序 并且应用程序在 localhost 4200 中运行良好 现在为了复制生产部署 我
  • 可选权限,以便应用程序可以在所有设备上显示并在某些设备上启用可选功能?

    Android 中的许多功能都需要在清单中设置使用权限 然后 这些值决定哪些设备将在市场上看到它们 但是 如果该功能是可选的 如果可以使其在许多设备上运行 但只需要少数设备上的许可 该怎么办 举个例子 假设一个应用程序具有多种功能和大量内容
  • 浏览器特定的前缀,在转换时具有 CSS 过渡

    根据 caniuse com 对于同时支持 CSS 的浏览器transition和CSStransform 组合起来至少有三种不同的类型 那些需要 webkit 两者的前缀transition and transform 例如 Safari
  • 使用反应本机元素更改主题不起作用?

    我一直在使用 React Native 元素 我想为我的应用程序实现黑暗模式 但由于某种原因我无法获取主题道具
  • 如何从命令行更新项目中的单个 nuget 包?

    我正在尝试更新具有多个依赖项的 csproj 中的单个包 也就是说 packages config 文件如下所示
  • 如何更改 SQLite 数据库列中的值?

    我有一个具有以下格式的 SQLite 数据库 TABLE users name text avatar text password text userdir text role numeric 我想更改数量role 我怎样才能改变它 我的意
  • IntelliJ 中的 Intellisense 不再工作

    我目前正在运行 IntelliJ IDEA 13 1 运行 IntelliJ 13 时 智能感知 自动完成停止工作 我尝试升级 但仍然不起作用 我可以使用显式调用代码完成ctrl space 我看了进去设置 gt 编辑器 gt 代码完成看起
  • 测试容器;在 docker 内运行 @Testcontainers 测试 [在 Docker 内运行 Docker]

    如何跑步 Testcontainers基于 docker 容器内的测试用例 我有一个简单的 Spring Boot 应用程序 它具有集成测试 组件级别 可以使用以下命令与容器进行交互Testcontainers 测试用例从外部容器 本地机器
  • 处理按键事件时 NSTextField 泄漏

    我是这个论坛的新手 我已经搜索过 但没有找到这个问题的任何答案 这个问题在本周的大部分时间里一直困扰着我 每次按下按键时 NSTextField 都会导致内存泄漏 我已将这个问题从我的代码中分离出来 并且可以按如下方式重现 创建一个新的 C
  • 如何禁用 UIWebview 水平滚动?

    我尝试通过插入来禁用它 到我的 HTML 字符串中 以及上面的十几个变体 徒劳地希望我只是搞砸了标签语法 但似乎没有什么可以阻止 UIWebView 水平滚动 然而 有些应用程序可以做到这一点 例如 MobileRSS 并且可能由于它们没有
  • iOS上删除大文件文件夹的性能

    假设我的 iOS 应用程序的数据目录中有一个文件夹 其中包含数千个小文件 删除此文件夹 通过 NSFileManager removeItemAtPath 需要相当长的时间 但在 OS X 上 删除具有相同内容的文件夹非常快 它似乎只是从文
  • Java 项目的包结构?

    在 Java Web 应用程序中设置包结构的最佳实践是什么 您将如何设置您的 src 单元测试代码等 你可以关注maven的标准项目布局 http maven apache org guides introduction introduct
  • shell中实时去除回车

    对于上下文 我尝试创建一个 shell 脚本来简化 ffmpeg 的实时控制台输出 仅显示正在编码的当前帧 我的最终目标是在某种进度指示器中使用此信息进行批处理 对于那些不熟悉 ffmpeg 输出的人来说 它将编码的视频信息输出到 stdo