将特定字符串后面的字符串写入文件

时间:2013-09-20 16:55:18

标签: bash sed grep

我需要一些bash函数的帮助。虽然我已经问了一个类似的问题,但我仍然愚蠢地自己写这个。

我的问题

我想写一个用户通过read -p给/ etc / hosts文件给出的域或子域。

应该在文件中的特定IP后面添加域。 IP存储在varvalle $ secondadapter中,$ secondadapter var作为全局变量存储在/etc/profile.d/file.sh中,因此每个用户都可以访问它。

我不熟悉grep和sed或awk所以我的功能失败了。这是我写的

writetohostsfile(){
hosts_file=/etc/hosts
if ! grep -q '$domain' "${hosts_file}" ; then
grep -F '${secondadapter}' "${hosts_file}" | echo -n " $domain"
else
echo "This domain already exists!"
fi  
}

欢迎任何帮助以及任何有关grep和sed的好帖子的链接。

2 个答案:

答案 0 :(得分:1)

更新。这应该足够大胆,以使其有效。

#!/bin/bash

read -p "Enter domain name: " domain

# . <(exec grep ^secondadapter= /etc/profile.d/file.sh)  ## Uncomment if the variable was not yet exported.

if [[ $secondadapter =~ ^[0-9]+\.[0-9]+.[0-9]+.[0-9]+$ ]]; then
    if grep "^$secondadapter[[:space:]]\+[^#]\+" /etc/hosts >/dev/null; then
        exp="s/^\(${secondadapter//./\\.}[[:space:]]\+[^#]\+\)/\1 $domain/"
        sed -i "$exp" /etc/hosts
    else
        echo "$secondadapter $domain" >> /etc/hosts
    fi
else
    echo "Value of \$secondadapter is invalid: $secondadapter"
fi

答案 1 :(得分:1)

这会将域添加到匹配行/etc/hosts

sed -i.bak "/^$secondadapter[ \t]/s/$/ $domain/" /etc/hosts