Informatica命令任务:sed中的双引号



我需要通过Informatica的命令运行sed命令。我已经知道Informatica通过sh -c "{command}"执行命令。然而,对于我的情况,我需要sed来替换一个特定的字符串,例如sed -i 's,xsi:namespace="http://url.example.com",,' file.xml

我试过用来转义双引号,但没有骰子,甚至认为当我直接在Linux中这样做时,它是有效的。

感谢Jonathan Leffler的评论。我在Mac上测试了这个命令。有关更多信息,请参阅Jonathan的评论。

试试这个,它对我有效

#!/bin/bash
sed -i '' -e  's,xsi:namespace="http://url.example.com",,' $1

这是我的测试和输出:

$ cat file.xml
xsi:namespace="http://url.example.com" hello there
$ cat test.sh
#!/bin/bash
sed -i '' -e  's,xsi:namespace="http://url.example.com",,' $1
$ ./test.sh file.xml      
$ cat file.xml
 hello there

这真的很棘手。一个似乎有效的版本使用了三个反斜杠:

$ bash -c "sed 's,xsi:namespace=\"http://url.example.com\",,'" 
> <<< 'abc-xsi:namespace="http://url.example.com"-def'
abc--def
$

第一对表示-c脚本中的反斜杠;反斜杠引号表示CCD_ 7脚本中的双引号。您可以在bash之前添加printf "%sn",以查看传递给bash:的参数

$ printf "%sn" bash -c "sed 's,xsi:namespace=\"http://url.example.com\",,'" 
> <<< 'abc-xsi:namespace="http://url.example.com"-def'
bash
-c
sed 's,xsi:namespace="http://url.example.com",,'
$

然而,一点思考和实验表明,单个反斜杠就足够了:

$ printf "%sn" bash -c "sed 's,xsi:namespace="http://url.example.com",,'" <<< 'abc-xsi:namespace="http://url.example.com"-def'
bash
-c
sed 's,xsi:namespace="http://url.example.com",,'
$ bash -c "sed 's,xsi:namespace="http://url.example.com",,'" <<< 'abc-xsi:namespace="http://url.example.com"-def'
abc--def
$

然而,当你尝试单个反斜杠时,很难看出你是如何不尝试这个的。

请注意,双反斜杠不是答案:

$ bash -c "sed 's,xsi:namespace=\"http://url.example.com\",,'" <<< 'abc-xsi:namespace="http://url.example.com"-def'
sed: 1: "s,xsi:namespace=http:/ ...": unterminated substitute in regular expression
$ printf "%sn" bash -c "sed 's,xsi:namespace=\"http://url.example.com\",,'" <<< 'abc-xsi:namespace="http://url.example.com"-def'
bash
-c
sed 's,xsi:namespace=http://url.example.com,,'
$

另一个非常值得思考的选择(这基本上是海夫詹在回答中建议的)是将sed脚本——或者整个sed命令——放入您运行的脚本中。这就避免了"反斜杠有多少"的问题:

$ cat script.sed
s,xsi:namespace="http://url.example.com",,
$ sed -f script.sed <<<'abc-xsi:namespace="http://url.example.com"-def'
abc--def
$ bash -c "sed -f script.sed" <<<'abc-xsi:namespace="http://url.example.com"-def'
abc--def
$

缺点可能是在创建和/或清理script.sed时出现问题。

最新更新