bash - 如何将分层数据回显到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
解决方案
如果您可以选择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
依赖它来正常工作。
推荐阅读
- c++ - 输入结束时的 OpenMP 预期声明或语句
- java - Apache Flink Python Table API UDF 依赖问题
- reactjs - MUI 网格系统
- arrays - 如何在分类器 fitcknn 中使用距离函数 dtw
- javascript - 用户登录后如何显示弹出消息?
- kubernetes-helm - 如何告诉 Helm 要安装哪个 repo 和 chart?
- apache-kafka - Kafka Cluster 和 Kafka Broker 有什么区别?
- ansible - 带有循环的 Ansible known_hosts 模块
- python - Spacy EntityRuler 合并/编辑实体?
- sql - 将一行拆分为三个单独的行