我在一个字符串中有多个属性行,由\n
分隔,如下所示:
LINES2="Abc1.def=$SOME_VAR\nAbc2.def=SOMETHING_ELSE\n"$LINES
LINES
变量
\n
。我打开任何命令行实用程序(sed,tr,awk,......你的名字)。
我试过这个无济于事
sed -z 's/\\n$//g' <<< $LINES2
我也没有运气 tr ,因为它不接受正则表达式。
可能有一种方法可以将\n
转换为其他内容。但由于$LINES
可以包含任意字符,因此这可能很危险。
我浏览了以下问题
答案 0 :(得分:1)
这是一个解决方案:
LINES2="Abc1.def=$SOME_VAR"$'\n'"Abc2.def=SOMETHING_ELSE${LINES:+$'\n'$LINES}"
如果变量${name:+value}
存在且不为空,则语法value
表示“插入name
”。因此,在这种情况下,如果$LINES
不为空,则会插入换行符后跟$LINES
,这似乎正是您想要的。
我使用$'\n'
因为"\n"
不是换行符。更可读的解决方案是定义一个shell变量,其值为单个换行符。
没有必要在shell赋值语句中引用字符串,因为赋值的右侧不会进行分词,也不会进行全局扩展。不引用会更容易插入$'\n'
。
通常不建议对shell变量使用UPPER-CASE,因为shell和OS使用大写名称用于它们自己的目的。您的局部变量通常应为小写名称。
因此,如果我不是根据问题中的命令得出答案,我会写:
lines2=Abc1.def=$someVar$'\n'Abc2.def=SOMETHING_ELSE${lines:+$'\n'$lines}