每次不同的字符串后替换所有内容

时间:2014-08-05 13:27:39

标签: perl awk sed grep

想要使用第二个grep。

中的结果ip更改security.server.ip = *之后的所有内容

First Grep:

cat admin.conf|grep security.server.ip|grep -v ^#

结果:

security.server.ip=10.10.1.2

Second Grep:

cat /etc/hosts|grep -i admin-server|head -1|awk '{ print $1}

结果:

10.10.1.2

有时在admin.conf上security.server.ip会有所不同,我想知道如何用一个命令替换它,它将从第二个grep中捕获IP地址并在第一个grep中替换它。

3 个答案:

答案 0 :(得分:1)

您可以使用脚本:

#!/bin/sh
IP=$(exec grep -i admin-server /etc/hosts | awk '{ print $1; exit }')
sed -i "/^security\.server\.ip=/s|=.*|=$IP|" admin.conf

答案 1 :(得分:1)

您可以将其保存在变量中:

NEWIP=`grep -i admin-server /etc/hosts|head -1|awk '{ print $1}'` \
sed -i "s/^security\.server\.ip=[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+/security\.server\.ip=$NEWIP/" admin.conf

答案 2 :(得分:0)

使用GNU awk进行就地编辑,nextfile和gensub():

gawk -i inplace '
    NR==FNR{ if (tolower($0) ~ /admin-server/) { ip=$1; nextfile } next }
    { $0=gensub(/(security\.server\.ip=).*/,"\\1"ip,""); print }
' /etc/hosts admin.conf