这应该很简单:我想针对文本字符串运行sed,而不是针对输入文件。如果您想知道为什么,它是为了编辑存储在变量中的值,而不一定是文本数据。
当我这样做的时候:
cat getGCC_MSISDN.tsk | sed -i 's/TEMP_MSISDN/'$1'/g' | java_gcc_soap_any.ksh
正确的命令应该是什么?我想让它从文件中获取我的MSIDN。
您可以尝试如下操作:
printf '%s' "$s" | sed "s/TEMP_MSISDN/$1/g" | java_gcc_soap_any.ksh
但这是非常脆弱的。例如,如果$1
包含/
,则此操作将失败。你可以试着用这样的东西来解决这个问题:
printf '%s' "$s" | sed "s@TEMP_MSISDN@$1@g" | java_gcc_soap_any.ksh
但你只是用一个坏符号换了另一个,并没有真正使解决方案健壮。如果你正在使用bash
,你也可以尝试这样做:
printf '%s' "${s/TEMP_MSISDN/$1}" | java_gcc_soap_any.ksh
使用printf
打印文本字符串
printf '%sn' 'some_literal_string' | sed 's/TEMP_MSISDN/'$1'/g' | java_gcc_soap_any.ksh