sed -e 's/cluster_name: 'Test Cluster'/cluster_name: 'Test Cluster1'/'
Run Code Online (Sandbox Code Playgroud)
我有这个错误信息:
sed: -e expression, char 20: unterminated `s' command
Run Code Online (Sandbox Code Playgroud)
请问,我该如何更正 sed 命令?
$ sed -e "s/cluster_name: 'Test Cluster'/cluster_name: 'Test Cluster1'/"
Run Code Online (Sandbox Code Playgroud)
或者
sed -e 's/cluster_name: '\''Test Cluster'\'\/cluster_name:' '\'Test' 'Cluster1\'/
Run Code Online (Sandbox Code Playgroud)
如果没有这个程序的帮助,全单引号更难构建,如果你需要一些帮助来获得正确的命令,你可以使用一个 C 程序
$ cat w.c
#include <stdio.h>
int main(int argc, char *argv[]) {
int i = 0;
while (argv[i]) {
printf("argv[%d] = %s\n", i, argv[i]);
i++;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我正在从 cygwin 进行测试,但任何 *nix shell 都应该是相同的
你看这行得通
$ ./w sed -e "s/cluster_name: 'Test Cluster'/cluster_name: 'Test Clust
er1'/"
argv[0] = F:\blah\w.exe
argv[1] = sed
argv[2] = -e
argv[3] = s/cluster_name: 'Test Cluster'/cluster_name: 'Test Cluster1'/
$
Run Code Online (Sandbox Code Playgroud)
而如果你尝试从嫌疑人
sed -e 's/cluster_name: \'Test Cluster\'/cluster_name: \'Test Cluster1\'/'
Run Code Online (Sandbox Code Playgroud)
您可以使用该程序查找其中的故障
他的一个甚至不执行
$ ./w sed -e 's/cluster_name: \'Test Cluster\'/cluster_name: \'Test C
luster1\'/'
>CTRL-C
Run Code Online (Sandbox Code Playgroud)
因为它缺少单引号
$ ./w 'fgg
>
也许还有其他问题。
如果你看一下嫌疑人的那个,它甚至在开始时就失败了,它在空间上中断了
$ ./w sed -e 's/cluster_name: \'Test Clu
argv[0] = f:\blah\w.exe
argv[1] = sed
argv[2] = -e
argv[3] = s/cluster_name: \Test
argv[4] = Clu
Run Code Online (Sandbox Code Playgroud)
这个有效
$ ./w sed -e 's/cluster_name: '\''Test Cluster'\'\/cluster_name:' '\'
Test' 'Cluster1\'/
argv[0] = F:\blah\w.exe
argv[1] = sed
argv[2] = -e
argv[3] = s/cluster_name: 'Test Cluster'/cluster_name: 'Test Cluster1'/
Run Code Online (Sandbox Code Playgroud)
当你把它放在一起时,你可以尝试添加一个空格和一个字符,然后你看看你的引用模式是打开还是关闭。如果它关闭,那么如果你想转义单引号然后使用 \' 如果它打开然后用 ' 关闭它然后做 \' 如果你忘记它是打开还是关闭然后添加一个空格,看看它是否会产生一个新参数或不。
| 归档时间: |
|
| 查看次数: |
2506 次 |
| 最近记录: |