我想在bash脚本中执行此命令。
代码:
#!/bin/bash
line=39;
d=d; ## For delete line
`echo "sed '$line$d' /etc/passwd"`;
但是当我执行时,我收到了这个错误:
sed: -e expresion #1, character 1: unknow command <<'>>
我尝试使用echo "sed \'$line$d\' /etc/passwd"
;
但同样的问题......
答案 0 :(得分:1)
您需要确保在调用变量时确保不会阻止single-quoting
扩展。现在可以在 single-quotes
中使用double-quotes
,但请注意。此外,虽然不是必需的,但在将两个变量背靠背时,最好使用大括号来防止歧义。也就是说,脚本中的sed
命令可以正常工作:
sed -e "${line}${d}" /etc/passwd
哪个会将/etc/passwd
输出到stdout
减去行$line
。要编辑/etc/passwd
,请使用sed -i
答案 1 :(得分:1)
要删除第39行,只需执行以下操作:
#!/bin/bash
line=39;
sed -i "${line}d" /etc/passwd
Sed将第二个参数作为输入文件,第一个参数作为命令。额外标志-i
将允许您将输出立即重定向到输入文件。请注意,这与sed 'command' file > file
不同,因为这会导致文件为空。
我还建议你在shell中执行man sed
。
答案 2 :(得分:0)
#!/bin/bash
# delete line 39 by editing inline via sed;
sed -i '39d' /etc/passwd
保持简单并添加评论,如果你想记住sed动作