首页 > 解决方案 > 如何将分层数据回显到bash中的文件中

问题描述

我有一个名为的shell变量:

check=$(grep text mytext.txt)
#grep text mytext.txt will give an output like: 
#text.1
#text.2
#text.3

如何按原样将以下内容回显到文件中:

data:  
   updatevalues: |-
      #${check}
      text.1
      text.2
      text.3

尝试这样做:

 printf "data:\n   updatevalues: | \n    `echo "$check"` " >> myfile.txt

但我无法对齐 $check :

data:  
   updatevalues: |-
      #${check}
      text.1
text.2
text.3

标签: bashshell

解决方案


如果您可以选择grep直接通过管道传输到命令,而不是捕获其输出,我会这样做。

grep text mytext.txt | {
  printf 'data:\n'
  printf '   updatevalues: |-\n'
  while IFS= read -r line; do
    printf '      %s\n' "$line"
  done
}

(前两个printf调用可以在管道之前,而不是在循环中。

printf 'data:\n'
printf '   updatevalues: |-\n'
grep text mytext.txt | {
  ...
}

)

虽然您仍然可以check通过管道打印值:

echo "$check
" | {
  ...
}

添加了额外的换行符,因为命令替换会剥离它,并read依赖它来正常工作。


推荐阅读