标签: printf

打印内部换行的数据列

我正在从日志中打印一些监控数据,如下所示:

printf " %10s %5s %25s %15s %15s %s${txtrst}\n" $date $time $metric $status $current_criticality "$failure"

我想要最后一列,它没有定义的长度来在其边界内换行,其中左侧是明确定义的,右侧是屏幕所在的位置(正常换行位置)。我试图定义长度,但这并没有解决它。

电流输出示例:

09/30/2015 14:39         execution        (SUCCESS)           SUCCESS
09/30/2015 14:34         execution         (FAILED)             ERROR  Step 3: Match Failed Blah blah blah blah blah blah blah.
09/30/2015 14:34         execution         (FAILED)           SUCCESS  Step 1: Match Failed Blah blah blah blah blah blah blah.
09/30/2015 14:34        round_trip         (10.174)             ERROR  Step 1: Match Failed Blah blah blah blah blah blah blah.
09/30/2015 14:34        round_trip         (10.174)           SUCCESS  Step 1: Match Failed Blah …
Run Code Online (Sandbox Code Playgroud)

bash printf

3
推荐指数
1
解决办法
1739
查看次数

如何修改 find 命令中的 -printf "%s \n" 来给我以 MB 为单位而不是字节的大小?

我正在编写一个简单的辅助函数来显示文件的大小:
这是我到目前为止的代码:

find . -type f -size +10M -printf "%f -> %s B\n"
Run Code Online (Sandbox Code Playgroud)

我得到的输出是:

clay-banks--Ni2fpLUgRI-unsplash.jpg -> 181794593 B
jake-nackos-_kdX2vPc33U-unsplash.jpg -> 448148323 B
73-738467_nature-wallpapers-high-quality-images-hd-desktop-images.jpg -> 131115725 B
Run Code Online (Sandbox Code Playgroud)

但是,我想以 MB 为单位显示文件大小。

我应该如何修改它,使其像 b 一样工作

clay-banks--Ni2fpLUgRI-unsplash.jpg -> 173 MB
jake-nackos-_kdX2vPc33U-unsplash.jpg -> 427 MB
73-738467_nature-wallpapers-high-quality-images-hd-desktop-images.jpg -> 125 MB
Run Code Online (Sandbox Code Playgroud)

bash find shell-script printf

3
推荐指数
1
解决办法
1920
查看次数

在哪里可以找到 printf 格式参考?

Bash/system命令支持的格式说明符(例如, )的离线参考在哪里?我看着,并没有运气。%i%sprintfhelp printfman 1 printfman 3 printf

man 1 printf 提到说它支持

%% 单个 %

%b ARGUMENT 作为带有 `\' 转义的字符串被解释,除了八进制转义的形式为 \0 或 \0NNN

以及所有以 diouxXfeEgGcs 之一结尾的 C 格式规范,首先将 ARGUMENT 转换为正确的类型。处理可变宽度。

字符列表很有用,但没有解释每个格式规范的确切语义。

shell bash printf

2
推荐指数
1
解决办法
4572
查看次数

如果变量为空,如何打印连字符?

我正在收集wmic在 Linux 系统上使用的 Windows 系统信息。为此,我进行了各种wmic调用,它们的输出存储在一些变量中。收集到所需数据后echo,将这些变量(以冒号分隔)保存到文件中。

但是,当变量存储“空”值时会出现问题,因为它只显示两个连续的冒号,不显示任何内容。

printf每当变量中存储空值时,如何利用以显示“连字符”?

bash text-processing printf

2
推荐指数
1
解决办法
891
查看次数

如何将涉及变量的多行附加到 bash 脚本的末尾?

我想补充:

function ps_mem {
   python /home/vagrant/ps_mem/ps_mem.py -p $@
}
Run Code Online (Sandbox Code Playgroud)

~/.bashrc从命令行结束。我试过使用:

printf "function ps_mem {\n python /home/vagrant/ps_mem/ps_mem.py -p $@ \n}" >> ~/.bashrc
Run Code Online (Sandbox Code Playgroud)

虽然它几乎起作用了,但输入字段$@被忽略了,使得:

function ps_mem {
 python /home/vagrant/ps_mem/ps_mem.py -p
}
Run Code Online (Sandbox Code Playgroud)

而是添加到~/.bashrc.

shell-script bashrc printf

2
推荐指数
1
解决办法
1605
查看次数

在 Bash 中创建类似表格的 CLI 显示的最佳方法?

我正在编写一个用于大规模 USB 闪存测试的 Bash 脚本(f3在后台使用)。我需要显示一个包含多个列和单元格的类似表格的界面。

目前我正在使用printfwith ,它看起来像这样:

在此输入图像描述

我为每个驱动器运行一个单独的函数,将文本写入日志文件。解析这些日志文件以向用户显示信息。

正如您所看到的,有些行具有不应该存在的偏移量,但我无法摆脱它们,这似乎不是由打印的长字符串引起的。我不知道这是什么。

我遇到的另一个问题是刷新时间以及有时需要手动清除和重绘整个屏幕,因为偶尔会出现 stderr 消息grep,或者cat当某些文件无法正确读取时。

我目前正在对该脚本进行部分重写,并且我可以更好地在屏幕上打印数据。我想过调查一下,ncurses但这似乎有点太复杂了,可能会让我维护起来变得复杂。

我想知道是否有一种方法可以让我将echoprint命令转储到文本文件中,然后立即执行所有命令以基本上拥有一个文本“后缓冲区”,以便我的刷新可以更加一致和更快?

我还希望能够监听用户的击键并在后台做出反应,但这不是优先事项。

也许有更好的方法在 Bash 中做这种事情,但我不知道?

command-line bash printf text-user-interface

2
推荐指数
1
解决办法
1万
查看次数

printf 无法解释反斜杠和感叹号

我正在使用终端编写 Java 程序printf并将其输出重定向到.java文件,但printf无法解释水平反斜杠选项卡 ( \t),并且当我在字符串中有感叹号 (!) 时,它甚至不打印并失败这个错误:

bash: !": event not found

  • 如何强制 printf 包含水平制表符?

  • 以及如何在不出现上述错误的情况下包含感叹号?

命令行参数:

$ printf "%s\n" "public class {" "\tpublic static void main(String[] args) {" "dogBark()" "}" "public static void dogBark() {" "System.out.println("Woof")" "}" "}" > barkingDog.java
Run Code Online (Sandbox Code Playgroud)

.java文件输出

$ less barkingDog.java
public class {
\tpublic static void main(String[] args) {
dogBark()
}
public static void dogBark() {
System.out.println(Woof)
}

}
Run Code Online (Sandbox Code Playgroud)

command-line bash quoting printf

2
推荐指数
1
解决办法
1083
查看次数

如何从bash中的文件名列表中删除文件扩展名

我正在尝试从使用以下 bash 脚本生成的文件列表中删除文件扩展名:

 #!/bin/bash
 file_list=$(find . -type f) #assuming that the files are stored in the same directory
 trimmed_file_list=$(printf '%s\n' "${file_list[@]%.*}")
 printf '%s\n' "${trimmed_file_list[@]}"
Run Code Online (Sandbox Code Playgroud)

此扩展从列表中的最后一个条目中删除扩展名,但不会删除任何较早的条目。

例如,我想要以下列表:

 file1.pdf
 file2.pdf
 file3.png
Run Code Online (Sandbox Code Playgroud)

成为

 file1
 file2
 file3
Run Code Online (Sandbox Code Playgroud)

但相反,我得到:

 file1.pdf
 file2.pdf
 file3
Run Code Online (Sandbox Code Playgroud)

我不想在循环中执行此操作,我想使用参数扩展。我想避免剪切,因为我只想删除文件中的最后一个扩展名。

有很多关于参数扩展的主题,似乎 bash 可能会因为find使用换行符而窒息......我真的不确定。如果另一个预先存在的主题解释了这个问题,我不完全理解发生了什么。

似乎相关但似乎无法解决我的问题的主题:

bash find string printf

2
推荐指数
1
解决办法
4833
查看次数

如何修改这个`while read; mv printf` 代码仅重命名某些文件类型的文件?

有问题的代码:

ls | cat -n | while read n f; do mv "$f" `printf "video_%03d.mp4" $n`; done
Run Code Online (Sandbox Code Playgroud)

上面的代码将执行的目录中的所有文件/文件夹重命名为:

video_001.mp4
video_002.mp4
video_003.mp4
and so on... 
Run Code Online (Sandbox Code Playgroud)

但是,最好只针对特定类型的文件,例如只重命名.mp4文件,而不是重命名包括目录在内的所有内容。

ls bash shell-script rename printf

2
推荐指数
1
解决办法
389
查看次数

Bash printf 格式化不起作用

例如,\c格式不起作用。我正在输入printf "ABC\ctest"bash 控制台和结果;

ABC\ctest
Run Code Online (Sandbox Code Playgroud)

考虑到\c格式的属性,预期的输出应该是 just 的形式ABC

我也没有找到详细说明在 bash 上使用 printf 命令的正确来源。此外,如上例所示,为 printf 命令指定的手册页上的属性无法正常工作。

请向我展示详细解释 printf 命令的 bash 源代码。因为我现在很迷茫。

bash printf

2
推荐指数
2
解决办法
1189
查看次数