Questions tagged «printf»

shell内置命令,用于格式化和打印数据。涉及printf命令的问题或通过编程语言广泛使用printf语法的问题(如awk,PHP,perl,C ++ ...)

4
为什么printf比echo好?
我听说printf比更好echo。从我的经验中,我只能回忆起一个必须使用的实例,printf因为它echo无法将某些文本输入RHEL 5.8上的某个程序,但是可以printf。但是显然还有其他差异,我想询问一下它们是什么,以及是否存在特定情况下何时使用一种对另一种。

2
为什么printf“缩小”变音符号?
如果我执行以下简单脚本: #!/bin/bash printf "%-20s %s\n" "Früchte und Gemüse" "foo" printf "%-20s %s\n" "Milchprodukte" "bar" printf "%-20s %s\n" "12345678901234567890" "baz" 它打印: Früchte und Gemüse foo Milchprodukte bar 12345678901234567890 baz 也就是说,带有变音符号的文字(例如ü)会被每个变音符号“缩小”一个字符。 当然,我在某个地方有一些错误的设置,但是我无法弄清楚可能是哪个。 如果文件的编码为UTF-8,则会发生这种情况。 如果我将其编码更改为latin-1,对齐方式是正确的,但是变音符号却被错误地呈现: Fr�chte und Gem�se foo Milchprodukte bar 12345678901234567890 baz
54 bash  unicode  printf 

5
将输出打印到3个单独的列
MYPATH=/var/www/html/error_logs/ TOTALFILE=$(ls $MYPATH* | wc -l) FILETIME=$(stat --format=%y $MYPATH* | head -5 | cut -d'.' -f1) FILE=$(ls -1tcr $MYPATH* | head -5 | rev | cut -d/ -f1 | rev) TOPLINE=$(head -1 $MYPATH* | grep -Po '".*?"' | head -5) 我如何优雅地将这5个文件信息打印到带有标题的列中? FILE CREATED TIME | FILE NAME | ERROR HEADER …

3
AWK printf数的宽度并四舍五入
我需要打印出一个数字,但要给定宽度并四舍五入(用awk!) %10s 我有这个,以某种方式我需要连接,%d但是我所做的一切最终导致awk的参数过多(因为我有更多的列)。
20 scripting  awk  printf 

2
为什么有些Unicode字符无法打印到我的终端上?
我正在使用Adobe Source Code Pro字体通过简单的终端运行Arch Linux。我的语言环境已正确设置为LANG=en_US.UTF-8。 我想将代表扑克牌的Unicode字符打印到我的终端上。我正在使用Wikipedia作参考。 卡套装的Unicode字符可以正常工作。例如,发行 $ printf "\u2660" 在屏幕上打印黑色的心。 但是,我在使用特定的纸牌时遇到了麻烦。发行 $ printf "\u1F0A1" 打印符号Ἂ1而不是黑桃🂡。怎么了 这个问题在多个终端(urxvt,xterm,白蚁)和我尝试过的每种字体(DejaVu,Inconsolata)上仍然存在。
16 bash  fonts  unicode  printf 

3
关于yash shell中的printf是否是内置命令有些困惑
根据其手册,该yash外壳具有printf内置功能。 但是,这是我在yash具有默认配置的shell中看到的内容: kk@eeyore ~ $ command -v printf /usr/bin/printf kk@eeyore ~ $ type printf printf: a regular built-in at /usr/bin/printf 是否printf在此外壳中内置?对于许多其他假定的内置实用程序(也可以作为外部命令使用),结果是相似的。 作为对比,在pdksh(ksh在OpenBSD,这里printf是不是内置的): $ command -v printf /usr/bin/printf $ type printf printf is /usr/bin/printf 而在bash(这里printf 是一个内置的): $ command -v printf printf $ type printf printf is a shell builtin

6
找到图案后仅打印输出
有一个脚本(我们称它为echoer)可以打印以显示大量信息。我希望只能在找到图案后才能看到线条。 我想象一种解决方案的用法看起来像 echoer | solution_command <pattern> 理想情况下pattern将是一个正则表达式,但是硬值字符串对我而言就足够了。
13 echo  printf 

1
如何阻止Bash解释八进制代码而不是整数?
我正在写一个Horoscope RSS脚本,作为Unix / Linux项目的介绍,但遇到一个问题,我的教授在下课后仍然无法解决。由于我无法弄清楚如何使用实际日期作为检查对象,因此我认为我将通过使用户输入为MMDD格式的标准数字来尝试基本算术。据他介绍,脚本似乎正在以八进制代码而不是整数形式读取输入。这是脚本示例: elif [ "$olddate" -gt 1121 ] && [ "$olddate" -lt 1131 ] || [ "$olddate" -gt 1200 ] && [ "$olddate" -lt 1222 ] then echo "You are Sagittarius" exit elif [ "$olddate" -gt 1221 ] && [ "$olddate" -lt 1232 ] || [ "$olddate" -gt …



5
bash +使用printf以特殊格式打印
我刚刚编写了以下bash脚本来检查Linux机器列表上的ping访问: for M in $list do ping -q -c 1 "$M" >/dev/null if [[ $? -eq 0 ]] then echo "($C) $MACHINE CONNECTION OK" else echo "($C) $MACHINE CONNECTION FAIL" fi let C=$C+1 done 打印: (1) linux643 CONNECTION OK (2) linux72 CONNECTION OK (3) linux862 CONNECTION OK (4) linux12 CONNECTION …

1
printf如何将一半舍入到小数点后第一位?
我正在系统上测试的两种不同实现printf:printf (GNU coreutils) 8.26和与捆绑在一起的版本zsh 5.3.1。我正在测试如何舍入一半的数字,即1.5、2.5、3.5,…9.5。 $ for i in {1..9}; do /usr/bin/printf '%.0f\n' "${i}.5"; done 2 2 4 4 6 6 8 8 10 $ for i in {1..9}; do printf '%.0f\n' "${i}.5"; done 2 2 4 4 6 6 8 8 10 在这里,两者显然都舍入为一半。但是,当我测试四舍五入到小数点后第一位时,事情变得令人困惑。也就是说,我正在测试1.15、1.25、1.35,... 1.95。 $ for i in {1..9}; …
11 printf  math 

4
使用awk修改具有可变字段数的文件中第一列的宽度
我知道如何使用awk的printf函数,但是我不想指定每个字段。 例如,假设这是我的文件: c1|c2|c3|c4|c5 c6|c7|c8|c9|c10 c11|c12|c13|c14|c15 我想对其进行格式化,以便每个记录的第一个字段是c11的宽度-第一个字段中最长的单元格: c1 |c2|c3|c4|c5 c6 |c7|c8|c9|c10 c11|c12|c13|c14|c15 我了解我可以指定: awk -F"|" '{printf "%-3s%s%s%s%s\n", $1, $2, $3, $4, $5}' file > newfile 假设我知道我希望第一列的宽度是多少,但是我不知道文件中有多少个字段。基本上我想做这样的事情: ... '{printf "%-3s|", $1}' ...,然后以其原始格式打印其余字段。

3
如何打印带有转义序列的控制字符?
我已经用tput定义了红色 red=$(tput setaf 1) 为我的程序中的警告着色。这工作正常: printf '%sfail\n' "$red" # prints 'fail' in red 但是有一次我想按原样打印转义序列,例如: \ E [31mfail 我该怎么做?我知道printf有一个%q标志,但是它可以逃避其他我不想要的东西。

3
如何在不删除尾随换行符的情况下将stdin捕获为变量?
在shell脚本中... 如何在不删除尾随换行符的情况下将stdin捕获为变量? 现在我已经尝试: var=`cat` var=`tee` var=$(tee) 在所有情况下$var,输入流都不会包含尾随换行符。谢谢。 还:如果输入中没有尾随换行符,则解决方案不得添加。 根据接受的答案进行更新: 我在代码中使用的最终解决方案如下: function filter() { #do lots of sed operations #see https://github.com/gistya/expandr for full code } GIT_INPUT=`cat; echo x` FILTERED_OUTPUT=$(printf '%s' "$GIT_INPUT" | filter) FILTERED_OUTPUT=${FILTERED_OUTPUT%x} printf '%s' "$FILTERED_OUTPUT" 如果您想查看完整代码,请参阅github页面的expandr,这是我为信息安全目的而开发的一个开源git关键字-扩展过滤器外壳脚本。根据.gitattributes文件(可以是特定于分支的文件)和git config中设置的规则,无论何时将其签入或签出存储库,git都会通过expandr.sh Shell脚本通过管道传输每个文件。(这就是为什么保留任何尾随的换行或缺少换行的关键。)这使您可以清除敏感信息,并交换不同的特定于环境的值集以进行测试,暂存和实时分支。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.