我有一个将数据输出到 stdout ( command1 -p=aaa -v=bbb -i=4)的命令。输出行可以具有以下值:
rate (10%) - name: value - 10Kbps
Run Code Online (Sandbox Code Playgroud)
我想 grep 该输出以存储该“速率”(我想管道在这里会很有用)。最后,我希望该速率是第二个命令的参数值(假设command2 -t=${rate})
我这边看起来很棘手;我想更好地了解如何使用管道、grep、sed 等。
我已经尝试了很多这样的组合,但我对这些感到困惑:
$ command1 -p=aaa -v=bbb -i=4 | grep "rate" 2>&1 command2 -t="rate was "${rate}
Run Code Online (Sandbox Code Playgroud) 有什么方法可以使用命令将所有终端输出保存到文件中吗?
command > file.txthistory > file.txt,我需要完整的终端文本就像是 terminal_text > file.txt
有提供彩色输出的工具:
dwdiff -c File1 File2 # word level diff
grep --color=always # we all know this guy
...
Run Code Online (Sandbox Code Playgroud)
问题是:如何将任意程序的彩色输出转换为彩色html文件?
其他输出格式也可能适用(LaTeX 会很棒)。我认为 html 是一个很好的起点,因为很容易将其转换为其他格式。
(对于如何保留终端颜色代码的好奇,请按照答案:https
:
//unix.stackexchange.com/a/10832/9689... | unbuffer command_with_colours arg1 arg2 | ... - 工具unbuffer是expect 的一部分)
目前我有一个 shell 脚本,它将消息记录到这样的日志文件中:
log_file="/some/dir/log_file.log"
echo "some text" >> $log_file
do_some_command
echo "more text" >> $log_file
do_other_command
Run Code Online (Sandbox Code Playgroud)
执行此脚本时,屏幕上没有输出,并且由于我通过 putty 连接到服务器,因此我必须打开另一个连接并执行“tail -f log_file_path.log”,因为我无法终止运行脚本,我想实时查看输出。
显然,我想要的是将文本消息打印在屏幕上并打印到文件中,但我想在一行中完成,而不是两行,其中一行没有重定向到文件。
如何实现这一目标?
邮件日志非常难以阅读。如何在命令行上打印的每一行之间输出一个空行?例如,假设我正在搜索日志。这样,多条包装线就不会被混淆。
SE 上有很多问题显示了如何从被cat /dev/urandom. 对于那些不熟悉这个问题的人 - 这里是关于:
cat /dev/urandom或等效(例如,cat binary_file.dat)。那没问题……除非您的终端在命令完成后继续打印垃圾!这是实际上是 g++ 输出的错误渲染文本的屏幕截图:
我想人们对 C++ 错误有时太神秘的看法是正确的!
通常的解决方案是 run stty sane && reset,尽管每次发生这种情况时都运行它有点烦人。
正因为如此,我想在这个问题中关注的是发生这种情况的原始原因,以及在发出此类命令后如何防止终端中断。我不是在寻找解决方案,例如将有问题的命令通过管道传递给tror xxd,因为这要求您在实际运行/打印之前知道程序/文件输出二进制文件,并且每次碰巧输出此类数据时都需要记住.
我注意到 URxvt、PuTTY 和 Linux 帧缓冲区中的相同行为,所以我认为这不是特定于终端的问题。我的主要怀疑是随机输出包含一些翻转字符编码的 ANSI 转义码(事实上,如果你cat /dev/urandom再次运行,它可能会打开终端,这似乎证实了这个理论)。如果这是正确的,这个转义码是什么?是否有任何标准方法可以禁用它?
我有一个输出大量数据的命令(例如,带有大量系统调用的 strace,运行几分钟)。
是否有任何选项(例如命令包装器或类似的东西)可以让我暂停命令的输出(只是屏幕上的输出,我不介意在后台运行的命令),然后在我执行后取消暂停看看它的输出?
我经常使用find或locate来查找路径。
(~) locate foobar.mmpz
/home/progo/lmms/projects/foobar.mmpz
Run Code Online (Sandbox Code Playgroud)
下一步通常是打开或以其他方式操作文件。在像上面这样的快乐情况下,我可以这样做:
(~) ls `!!`
ls `locate foobar.mmpz`
/home/progo/lmms/projects/foobar.mmpz
Run Code Online (Sandbox Code Playgroud)
但是当有很多输出行时,没有人会太高兴,其中一些可能不是路径或其他类似的东西。此外,重新运行可能浪费的命令也不是那么优雅。
有没有办法连接 zsh 以将标准输出存储到数组中以供以后操作?毕竟,将流重定向到用户是 shell 的工作。我认为它可以将前 N 行和最后 N 行存储在变量中以供以后立即使用,例如$?和其他。
好的,这很酷:https : //unix.stackexchange.com/a/59704/5674。我现在询问 zsh 专有技术(并将代码移植到 zsh)以在每个运行行之后装配这种捕获。
我有一个简单的 bash 函数将两个数字相除:
echo "750/12.5" | bc
Run Code Online (Sandbox Code Playgroud)
我想采取输出bc和追加/24和管道表示结果的另一个实例bc。
就像是:
echo "750/12.5" | bc | echo $1 + "/24" | bc
Run Code Online (Sandbox Code Playgroud)
$1管道结果在哪里。
PS我意识到我可以做echo "750/12.5/24" | bc我的问题更多的是关于将文本附加到管道结果。
INPUT_FILE=`ls -rt $MY_DIR/FILE.*.xml | head -1 | xargs basename`
Run Code Online (Sandbox Code Playgroud)
我只想head -1在第一个命令成功时执行第二个命令 ( )。如何改进此命令?