首页 > 解决方案 > 将多行文件转换为一行并保留 \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 格式:

在此处输入图像描述

标签: bashshell

解决方案


在下面检查我的基于 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

推荐阅读