字符串中的 Ksh 美元和回车符 return
Ksh dollar and carriage return in a string
我有一个 ksh 脚本,我在将几行带回车符的行插入文件时遇到问题。
#!/bin/ksh
FILE_NAME="/tmp/t.xml"
LINE="<moid>ManagedElement=1,Equipment=1,Subrack=MAIN,Slot=3,PlugInUnit=1</moid>"
COUNTER_VALUE=`grep -A4 $LINE $FILE_NAME | sed -e '/-/,$d' | grep '<r>`
sed "1i$COUNTER_VALUE" $FILE_NAME
Ksh 调试日志如下。
aaa[678] /tmp$ ksh -x ./t.ksh
+ FILE_NAME=/tmp/t.xml
+ LINE='<moid>ManagedElement=1,Equipment=1,Subrack=MAIN,Slot=3,PlugInUnit=1</moid>'
+ grep -A4 '<moid>ManagedElement=1,Equipment=1,Subrack=MAIN,Slot=3,PlugInUnit=1</moid>' /tmp/t.xml
+ grep '<r>'
+ sed -e '/-/,$d'
+ COUNTER_VALUE=$'<r></r>\n<r></r>'
+ sed $'1i<r></r>\n<r></r>' /tmp/t.xml
sed: -e expression #1, char 11: unknown command: `<'
我的问题是变量 COUNTER_VALUE 中的第一个美元符号是什么。
我实际上想要 COUNTER_VALUE 如下。
COUNTER_VALUE='<r></r>\n<r></r>'
保留马车return并且没有烦人的美元符号。
这个特殊的美元在我的 sed 命令中造成了问题。
请帮忙。
文件 t.xml 的内容如下。
<gp>900</gp>
<mt>pmSwitchIngressDiscards</mt>
<mt>pmSwitchIngressLoad</mt>
<mv>
<moid>ManagedElement=1,Equipment=1,Subrack=MAIN,Slot=3,PlugInUnit=1</moid>
<r></r>
<r></r>
</mv>
<mv>
COUNTER_VALUE=$'<r></r>\n<r></r>'
中的$
实际上并不存在
那是 -x
向您展示该字符串中的 \n
是一个 文字 换行符,而不是 \
和 [= 这两个字符16=].
嵌入式换行符是问题所在。有了它,sed 将 1i<r></r>
视为一个命令,然后将 <r></r>
视为第二个命令。
您需要删除 and/or 转义该换行符才能使其正常工作。
您可以通过以下方式转义:
COUNTER=${COUNTER//$'\n'/$'\\n'}
我有一个 ksh 脚本,我在将几行带回车符的行插入文件时遇到问题。
#!/bin/ksh
FILE_NAME="/tmp/t.xml"
LINE="<moid>ManagedElement=1,Equipment=1,Subrack=MAIN,Slot=3,PlugInUnit=1</moid>"
COUNTER_VALUE=`grep -A4 $LINE $FILE_NAME | sed -e '/-/,$d' | grep '<r>`
sed "1i$COUNTER_VALUE" $FILE_NAME
Ksh 调试日志如下。
aaa[678] /tmp$ ksh -x ./t.ksh
+ FILE_NAME=/tmp/t.xml
+ LINE='<moid>ManagedElement=1,Equipment=1,Subrack=MAIN,Slot=3,PlugInUnit=1</moid>'
+ grep -A4 '<moid>ManagedElement=1,Equipment=1,Subrack=MAIN,Slot=3,PlugInUnit=1</moid>' /tmp/t.xml
+ grep '<r>'
+ sed -e '/-/,$d'
+ COUNTER_VALUE=$'<r></r>\n<r></r>'
+ sed $'1i<r></r>\n<r></r>' /tmp/t.xml
sed: -e expression #1, char 11: unknown command: `<'
我的问题是变量 COUNTER_VALUE 中的第一个美元符号是什么。 我实际上想要 COUNTER_VALUE 如下。
COUNTER_VALUE='<r></r>\n<r></r>'
保留马车return并且没有烦人的美元符号。 这个特殊的美元在我的 sed 命令中造成了问题。
请帮忙。
文件 t.xml 的内容如下。
<gp>900</gp>
<mt>pmSwitchIngressDiscards</mt>
<mt>pmSwitchIngressLoad</mt>
<mv>
<moid>ManagedElement=1,Equipment=1,Subrack=MAIN,Slot=3,PlugInUnit=1</moid>
<r></r>
<r></r>
</mv>
<mv>
COUNTER_VALUE=$'<r></r>\n<r></r>'
中的$
实际上并不存在
那是 -x
向您展示该字符串中的 \n
是一个 文字 换行符,而不是 \
和 [= 这两个字符16=].
嵌入式换行符是问题所在。有了它,sed 将 1i<r></r>
视为一个命令,然后将 <r></r>
视为第二个命令。
您需要删除 and/or 转义该换行符才能使其正常工作。
您可以通过以下方式转义:
COUNTER=${COUNTER//$'\n'/$'\\n'}