Shell 脚本输出缩进

Shell 脚本输出缩进

我想在另一个脚本中调用 shell 脚本/应用程序。所包含脚本的每一行都应缩进 2 个空格。这可能吗?

输出看起来应该像这样。

I'm the main-scripts' output.
  I'm a second script, called inside the main-script.
  Every line of my output is indented by 2 spaces.
  This is not implemented inside of me, but in the main-script
  as I should also be called outside of the main-script and then
  my output shouldn't be indented.
Thats all from the second script.

这可能吗?如何实现?

答案1

您可以使用sedawk来执行此操作。例如,在主脚本中您可以执行以下操作:

# execute the command and pipe to sed
second-script | sed 's/\(.*\)/  \1/'

上述sed命令只是在输出的每一行前面添加了两个空格second-script

答案2

与 Unix 中其他所有系统一样,这里也有选项。

paste

使用该paste实用程序和一个空白的 LHS 文件,例如:

cat ~/.bashrc | paste /dev/null -

cat命令是第二个脚本的占位符。

paste命令用于将两个文件放在一起,例如:

$ paste file1 file2
file 1 line 1    <TAB>  file 2 line 1
file 1 line two  <TAB>  file 2 line 2
file 1 line 3    <TAB>  file 2 line iii

我上面使用它的方式是使用/dev/nullfile1STDINfile2指定-。用作输入时,/dev/null返回 NULL 字符。这意味着 的每一行file2(第二个脚本的输出)前面都有 NULL,后面跟着一个 TAB 字符。

您可以更进一步:paste有一个--delimiter选项,但指定两个空格并不能达到预期的效果:分隔符 1用于第一列和第二列之间,分隔符 2用于第二个和第三个之间,依此类推。

paste|expand

要获得两个空格的缩进,您可以paste再次使用普通管道expand -2:这会将所有制表符变成两个空格:

cat ~/.bashrc | paste /dev/null - | expand -2

这将完全按照您指定的方式运行。

sed或者awk

另一种方法是使用sedawk

cat ~/.bashrc | sed 's/^/  /'

这将搜索行首(“ ^”),然后替换或实际插入一对空格。

cat ~/.bashrc | awk '{printf "  %s\n",$0}'

这将获取每个整行(“ $0”)并使用 进行格式化printf,使用两个空格的格式说明符,后跟要打印的字符串,后跟换行符。


请记住,上述所有命令都可以消除cat管道的一部分,即paste /dev/null ~/.bashrc,或paste /dev/null ~/.bashrc|expand -2,同样sed 's/^/ /' ~/.bashrc或。在管道中awk '{printf " %s\n",$0}' ~/.bashrc使用 first 通常被认为是初学者的错误。cat

相关内容