Linux 在bash脚本中执行sed命令

Linux 在bash脚本中执行sed命令,linux,bash,sed,Linux,Bash,Sed,我想在bash脚本中执行这个命令 代码: 但当我执行时,我得到了这个错误: sed: -e expresion #1, character 1: unknow command <<'>> sed:-e expresion#1,字符1:unknow命令调用变量时,您需要确保不会通过单引号阻止变量的扩展。现在可以在双引号中使用单引号,但要注意。此外,虽然不是必需的,但在背靠背放置两个变量时,最好使用大括号以避免歧义。也就是说,脚本中的sed命令可以正常工作,如下所示: se

我想在bash脚本中执行这个命令

代码:

但当我执行时,我得到了这个错误:

sed: -e expresion #1, character 1: unknow command <<'>>

sed:-e expresion#1,字符1:unknow命令调用变量时,您需要确保不会通过
单引号
阻止变量的扩展。现在可以在双引号中使用单引号,但要注意。此外,虽然不是必需的,但在背靠背放置两个变量时,最好使用大括号以避免歧义。也就是说,脚本中的
sed
命令可以正常工作,如下所示:

sed -e "${line}${d}" /etc/passwd

它将输出
/etc/passwd
stdout
减号行
$line
。要在位编辑
/etc/passwd
,请使用
sed-i

删除第39行,只需执行以下操作:

#!/bin/bash
line=39;
sed -i "${line}d" /etc/passwd
Sed将第二个参数作为输入文件,第一个参数作为命令。额外标志
-i
将允许您立即将输出重定向到输入文件。请注意,这与
sed'command'file>file
不同,因为这将导致一个空文件

我还建议在shell中执行
mansed

#!/bin/bash

# delete line 39 by editing inline via sed;
sed -i '39d' /etc/passwd

如果您想记住sed操作,请保持简单并添加注释

我不认为应该扩展
d
,我相信他想使用
sed来删除。现在甚至没有
sed
命令。。。在我看来,问题在于,他试图用一美元来结束变量,而不是用大括号来封装它。在调用前查看
pastebin
中的代码,它确实是
d=d
是的,我忽略了那部分,我的错。这绝对是更好的答案:)你的解决方案是完美的大卫·C·兰金!工作正常。从何处删除第39行?输出到标准输出
?或者在
/etc/passwd
/etc/passwd
是输入文件,在粘贴箱中检查他的代码。我做了,sed
foo
/etc/passwd只在
cat/etc/passwd
上运行。对于
就地编辑
,您必须包含
-i
。您是对的,我太马虎了!考虑我的答案被吊销!!谢谢你指出这一点。问题是我不知道那一行,我得到了一个for中的行号,并比较了名称。在这种情况下,@ShellFish回复就可以了
#!/bin/bash

# delete line 39 by editing inline via sed;
sed -i '39d' /etc/passwd