Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当变量作为参数传递时,sed命令在shell脚本中不起作用_Shell_Sed - Fatal编程技术网

当变量作为参数传递时,sed命令在shell脚本中不起作用

当变量作为参数传递时,sed命令在shell脚本中不起作用,shell,sed,Shell,Sed,我的shell脚本中有以下代码 a=$(cat php1.php | grep 'hello') echo $a sed -i 's/'"$a"'/world/' php1.php 变量正在正确打印。然而,当我将其作为参数传递给sed命令时,sed命令不起作用 我哪里出错了?检查$a的值。我认为$a包含一些空间字符。您的命令非常有效: sed -i 's/'"$a"'/world/' php1.php 但是,您的sed命令可以使用双引号自动展开shell变量。请尝试以下方法: sed -i

我的shell脚本中有以下代码

a=$(cat php1.php | grep 'hello')
echo $a
sed -i 's/'"$a"'/world/' php1.php
变量正在正确打印。然而,当我将其作为参数传递给sed命令时,sed命令不起作用


我哪里出错了?

检查$a的值。我认为$a包含一些空间字符。

您的命令非常有效:

sed -i 's/'"$a"'/world/' php1.php
但是,您的
sed
命令可以使用双引号自动展开shell变量。请尝试以下方法:

sed -i "s/$a/world/" php1.php

我可能不完全理解您试图实现的目标,但是如果您试图用
world
替换
hello
(以一种相当全面的方式),您可能需要将
-o
标志添加到
grep
命令中:

a=$(grep -o "hello" php1.php)

您的脚本的目的似乎是将php1.php中包含单词“hello”的所有行替换为单词“world”。就是这样:

sed -i 's/.*hello.*/world/' php1.php

如果您正在尝试执行其他操作,请告诉我们它是什么,我们可以帮助您。

编辑最后一行以
echo sed-i的/“$a”/world/”php1.php
并发布输出。。。也许
$a
包含斜杠?代码段的每一行在某种程度上都是错误的,所以在您尝试在实际文件系统上运行它之前,您可能希望发布更多的完整脚本以获取反馈。我也检查了它。它没有特殊字符。我认为错误在于分隔符。我知道当作为命令发出时,它工作正常。但是,它在脚本中不起作用。我想编辑我的配置文件,这只是我发布的一个示例,而不是确切的示例。我也尝试了双引号,但没有成功。听起来好像问题与
sed
无关。我可以推测,但是如果你能发布你遇到问题的脚本以及php文件的内容,那会更快(更容易)。也许我可以进一步帮助你。