我正在从一个数组中创建一个变量,该变量为-e
命令构建了多个sed
子句。
结果变量类似于:
sedArgs="-e 's/search1/replace1/g' -e 's/search2/replace2/g' -e 's/search3/replace3/g'"
但是当我尝试将sed作为参数调用时,我得到了错误sed: -e expression #1, char 1: unknown command: ''
我试图通过以下方式调用sed:
cat $myFile | sed $sedArgs
cat $myFile | sed ${sedArgs}
cat $myFile | sed `echo $sedArgs`
cat $myFile | sed "$sedArgs"
cat $myFile | sed `echo "$sedArgs"`
并且都会出现同样的错误。
更新 - 重复提问
正如已经确定的那样,这是一个“引用扩展”问题 - 我认为这是sed
具体的问题,但是duplicate question that has been identified让我走上正轨。
我设法通过将sedArgs
字符串创建为:
sedArgs="-e s/search1/replace1/g -e s/search2/replace2/g -e s/search3/replace3/g"
并用:
调用它cat $myFile | sed $sedArgs
完美无缺。
然后我接受了三人的建议,踢了无用的cat
!
sed $sedArgs $myFile
也很完美。
答案 0 :(得分:2)
使用BASH数组而不是简单的字符串:
ws1.Range("A1").Autofilter _
Field:=1, _
Criteria1:=Array("Mumbai","Delhi"), _
Operator:=xlFilterValues
答案 1 :(得分:0)
这是没有理智的方法,但您可以将脚本作为单个字符串传递。
sedArgs='s/search1/replace1/g
s/search2/replace2/g
s/search3/replace3/g'
: then
sed "$sedArgs" "$myFile"
单引号字符串跨越多行;当你第一次看到它时,这是可怕的,但完全正常的shell脚本。另请注意cat
is useless如何以及如何引用文件名。