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

时间:2016-03-24 21:27:57

标签: sed informatica

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

我尝试使用\转义双引号,但没有骰子,甚至认为它直接在Linux中运行时也能正常工作。

2 个答案:

答案 0 :(得分:1)

感谢Jonathan Lefflercomment。我在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

答案 1 :(得分:0)

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

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

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

$ printf "%s\n" 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 "%s\n" 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 "%s\n" 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\,,'
$

另一个值得思考的替代方案(基本上是haifzhan在他的answer中提出的建议)是放置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的问题。