作者:金瑞期货秦臻 | 来源:互联网 | 2022-12-06 13:26
似乎无法在网上找到这个答案...
我有一个字符串变量(外部源),新行"\n"
编码为字符串.
我想用实际的新行回车替换这些字符串.下面的代码可以达到这个目的......
echo $EXT_DESCR | sed 's/\\n/\n/g'
但是当我尝试将结果存储到它自己的变量中时,它会将它们转换回字符串
NEW_DESCR=`echo $EXT_DESCR | sed 's/\\n/\n/g'`
如何实现这一目标,或者我做错了什么?
这是我的代码,我一直在测试,以尝试获得正确的结果
EXT_DESCR="This is a text\nWith a new line"
echo $EXT_DESCR | sed 's/\\n/\n/g'
NEW_DESCR=`echo $EXT_DESCR | sed 's/\\n/\n/g'`
echo ""
echo "$NEW_DESCR"
PesaThe..
7
不需要sed
,使用参数扩展:
$ foo='1\n2\n3'; echo "${foo//'\n'/$'\n'}"
1
2
3
使用bash 4.4
或更新,您可以E
在${parameter@operator}
以下位置使用运算符:
$ foo='1\n2\n3'; echo "${foo@E}"
1
2
3
melpomene..
6
其他答案包含替代解决方案 (我特别喜欢参数扩展一个.)
这是你的尝试出了什么问题:
在
echo $EXT_DESCR | sed 's/\\n/\n/g'
sed命令是单引号,因此sed s/\\n/\n/g
按原样运行.
在
NEW_DESCR=`echo $EXT_DESCR | sed 's/\\n/\n/g'`
整个命令在反引号中,因此应用了一轮反斜杠处理.这导致sed获取代码s/\n/\n/g
,它什么都不做.
此代码的可能修复:
NEW_DESCR=`echo $EXT_DESCR | sed 's/\\\\n/\\n/g'`
通过加倍反斜杠,我们在sed中得到了正确的命令.
或者(更容易):
NEW_DESCR=$(echo $EXT_DESCR | sed 's/\\n/\n/g')
而不是使用反引号$( )
,其具有较少深奥的逃避规则.
注意:不要ALL_UPPERCASE
用于shell变量.UPPERCASE
被(非正式地)保留供系统变量,例如HOME
与特殊内置变量如IFS
或RANDOM
.
1> PesaThe..:
不需要sed
,使用参数扩展:
$ foo='1\n2\n3'; echo "${foo//'\n'/$'\n'}"
1
2
3
使用bash 4.4
或更新,您可以E
在${parameter@operator}
以下位置使用运算符:
$ foo='1\n2\n3'; echo "${foo@E}"
1
2
3
谢谢!!参数扩展最初是我昨天开始时想要做的,但无法绕过它!这太棒了!
2> melpomene..:
其他答案包含替代解决方案 (我特别喜欢参数扩展一个.)
这是你的尝试出了什么问题:
在
echo $EXT_DESCR | sed 's/\\n/\n/g'
sed命令是单引号,因此sed s/\\n/\n/g
按原样运行.
在
NEW_DESCR=`echo $EXT_DESCR | sed 's/\\n/\n/g'`
整个命令在反引号中,因此应用了一轮反斜杠处理.这导致sed获取代码s/\n/\n/g
,它什么都不做.
此代码的可能修复:
NEW_DESCR=`echo $EXT_DESCR | sed 's/\\\\n/\\n/g'`
通过加倍反斜杠,我们在sed中得到了正确的命令.
或者(更容易):
NEW_DESCR=$(echo $EXT_DESCR | sed 's/\\n/\n/g')
而不是使用反引号$( )
,其具有较少深奥的逃避规则.
注意:不要ALL_UPPERCASE
用于shell变量.UPPERCASE
被(非正式地)保留供系统变量,例如HOME
与特殊内置变量如IFS
或RANDOM
.
我要包括http://mywiki.wooledge.org/BashFAQ/082,特别是**也见**:)