删除包含字符串的行

时间:2014-03-12 15:40:09

标签: shell terminal sh

我正在尝试删除包含字符串传递参数的行,但我无法使其工作。我在OSX 10.9上。

sed -i '' '/$2/d' /etc/hosts

不应该这样吗?它只保留文件。没有什么变化。我的命令是sudo hosts remove junior.dev

这是我的shell脚本:

#!/bin/sh

let $# || { echo No arguments supplied. Example: hosts add 192.168.2.2 mysite.dev; exit 1; }

if [ $1 = "add" ]; then
    if [ -z "$2" ] || [ -z "$3" ]; then
        echo "You must supply an IP address and a host name."
        exit 1;
    else
        echo "$2\t$3" >> /etc/hosts
        echo "Done."
    fi
fi

if [ $1 = "remove" ]; then
    if [ -z "$2" ]; then
        echo "You must supply a host name."
        exit 1;
    else
        sed -i '' '/$2/d' /etc/hosts
        echo "Done."
    fi
fi

1 个答案:

答案 0 :(得分:2)

使用双引号"

$ echo "$foo"
> bar
$ echo '$foo'
> $foo

使用双引号"时,变量会被展开,当使用单引号'时,它们不会展开。