Linux 在bash脚本中执行sed命令
我想在bash脚本中执行这个命令 代码: 但当我执行时,我得到了这个错误: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
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
是输入文件,在粘贴箱中检查他的代码。我做了,sedfoo
/etc/passwd只在cat/etc/passwd
上运行。对于就地编辑
,您必须包含-i
。您是对的,我太马虎了!考虑我的答案被吊销!!谢谢你指出这一点。问题是我不知道那一行,我得到了一个for中的行号,并比较了名称。在这种情况下,@ShellFish回复就可以了
#!/bin/bash
# delete line 39 by editing inline via sed;
sed -i '39d' /etc/passwd