bash - 将多行文件转换为一行并保留 \n
问题描述
我有一个 bash 脚本,可以将具有多通道的 txt 图像转换为单个参数,该参数应该是单行,因为我需要稍后将它作为参数传递给不同的脚本。
该脚本删除了新行“ \n
”并改为放置空间-但我需要的是保留“ \n
”但仍创建一个单行参数。
原始文件(总是在变化,可以有更多/更少的行),images.txt:
feeder-srv
newTag: develop_eaf7128
input-registry-srv
newTag: master_e16b788
shard-mongo-srv
newTag: master_2d2262e
shard-es-srv
newTag: master_66ac45e
转换为一行参数的命令:
images_one_line=$(tr '\n' ' ' < images.txt)
参数输出为:
feeder-srv newTag: develop_eaf7128 input-registry-srv newTag: master_e16b788 shard-mongo-srv newTag: master_2d2262e shard-es-srv newTag: master_66ac45e
我后来将其作为参数传递给另一个脚本:source wiki-update.sh "${images_one_line}"
我需要的参数输出:
feeder-srv newTag: develop_eaf7128\n input-registry-srv newTag: master_e16b788\n shard-mongo-srv newTag: master_2d2262e\n shard-es-srv newTag: master_66ac45e\n
我需要“ \n
”,因为然后我使用 curl 执行 REST-API 请求来编辑页面,并且我需要保持某种 HTML 格式:
解决方案
在下面检查我的基于 awk 的方法:
$ echo 'feeder-srv
newTag: develop_eaf7128
input-registry-srv
newTag: master_e16b788
shard-mongo-srv
newTag: master_2d2262e
shard-es-srv
newTag: master_66ac45e' | awk 'BEGIN{c=1;}
{
if(c % 2 == 0){
printf("%s\\n ", $0)
}
else{
printf("%s ", $0)
}
c++;
}'
feeder-srv newTag: develop_eaf7128\n input-registry-srv newTag: master_e16b788\n shard-mongo-srv newTag: master_2d2262e\n shard-es-srv newTag: master_66ac45e\n
推荐阅读
- ubuntu - 在没有 ca-certificates 包的情况下将受信任的 CA 添加到 ubuntu
- angular - 除了我之外的任何人都清楚 Angular 组件接收数据但不更新
- python-sphinx - 有没有办法在 Sphinx 中使用由 Doxygen 生成的点文件?
- kubernetes - 如何在 Datadog 上为 Kubernetes 创建 ImagePullBackOff 警报及其恢复警报?
- python - 当输入为 10.1 时,它显示错误,但为什么?我认为它应该将其转换为整数?
- c# - EF Core 能否按非选定列排序(EF Core Net 5)
- next.js - 如何在 hexo 博客的同一行中设置两个图像?
- c++ - 如何确定 std::filesystem::remove_all 是否失败?
- javascript - Firebase 云消息传递通知在某些设备上没有声音
- c - Hackerrank 问题(转换后) (C) 导致此段错误的原因是什么?