在bash脚本中执行sed命令

时间:2014-11-20 23:22:34

标签: linux bash sed

我想在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";

但同样的问题......

3 个答案:

答案 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动作