String Bash/Shell脚本在读取文件时将while循环中的字符串与字段参数连接起来
我很难正确地读取一个只不过是key=value文件的文件 这是文件:String Bash/Shell脚本在读取文件时将while循环中的字符串与字段参数连接起来,string,bash,loops,file,String,Bash,Loops,File,我很难正确地读取一个只不过是key=value文件的文件 这是文件: #test.txt global.project=99999 global.env=pr global.app=Terraform global.dcs=CloudBroker global.cbp=n/a 代码如下: TS=“” 而IFS==read-rf1f2;做 echo$f1 echo$f2 val=$f2 TS+=“\”${f1}\”:\“${f2}\”,“ 完成
#test.txt
global.project=99999
global.env=pr
global.app=Terraform
global.dcs=CloudBroker
global.cbp=n/a
代码如下:
TS=“”
而IFS==read-rf1f2;做
echo$f1
echo$f2
val=$f2
TS+=“\”${f1}\”:\“${f2}\”,“
完成<“tags.txt”
echo“${TS}”#Result:,“global.cbp:“n/audBroker”
结果很奇怪。当我删除f2时,则不会出现任何问题
预期结果应该是:
“global.opco”:“99999”,“global.env”:“pr”等等。根据@GordonDavisson的评论,我修改了脚本,现在它就像一个符咒一样工作:
TS=“”
而IFS=$'=\r'读取-r f1 f2;做
echo$f1
echo$f2
val=$f2
TS+=“\”${f1}\”:\“${f2}\”,“
完成<“tags.txt”
echo“${TS}”#结果:{“global.project”:“99999”,“global.env”:“pr”,“global.app”:“Terraform”,“global.dcs”:“CloudBroker”,“global.cbp”:“n/a”,}
根据@GordonDavisson的评论,我修改了脚本,现在它就像一个符咒:
TS=“”
而IFS=$'=\r'读取-r f1 f2;做
echo$f1
echo$f2
val=$f2
TS+=“\”${f1}\”:\“${f2}\”,“
完成<“tags.txt”
echo“${TS}”#结果:{“global.project”:“99999”,“global.env”:“pr”,“global.app”:“Terraform”,“global.dcs”:“CloudBroker”,“global.cbp”:“n/a”,}
只是一个正则表达式:
sed 's/\(.*\)=\(.*\)\r\?/"\1":"\2"/' tags.txt | paste -sd,
# ^ merge lines with comma
# ^ ^^^ ^ add some characters
# put ^^^^^^ ^^ <- here
# put ^^^^^^ ^^ <- here
sed's/\(.*\)=\(.*\)\r\?/“\1”:“\2”/“tags.txt”| paste-sd,
#^用逗号合并行
#^^^^^^添加一些字符
#把^^^^^放在一个正则表达式上:
sed 's/\(.*\)=\(.*\)\r\?/"\1":"\2"/' tags.txt | paste -sd,
# ^ merge lines with comma
# ^ ^^^ ^ add some characters
# put ^^^^^^ ^^ <- here
# put ^^^^^^ ^^ <- here
sed's/\(.*\)=\(.*\)\r\?/“\1”:“\2”/“tags.txt”| paste-sd,
#^用逗号合并行
#^^^^^^添加一些字符
#放置^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^,它被视为f2的一部分。看见在您的情况下,您可以通过稍微更改read
命令来修剪它:,而IFS=$'=\r'read-rf1f2;do
。我认为您的文件有DOS行结尾,请使用dos2unix
修复,然后再试一次。test.txt文件是DOS/Windows格式,每行结尾都有一个非打印回车字符(除了unix程序期望的换行符),并且它被视为f2
的一部分。看见在您的情况下,您可以通过稍微更改read
命令来修剪它:,而IFS=$'=\r'read-rf1f2;执行
。