linux sed 替换,使用变量,变量中含有特殊字符的处理

文件 test.sh 内容如下:

#!/bin/bash

export JAVA_HOME=/data/jdk_1.9.0
echo $JAVA_HOME

想把 JAVA_HOME = 后面的内容替换为其它内容,这里选择使用 sed 整行替换。

一种写法如下:

#!/bin/bash
set -x

java_home=$(cat test.sh | grep -n "JAVA_HOME=")
line=$(echo $java_home | awk -F ":" '{print $1}')
text=$(echo $java_home | awk -F ":" '{print $2}')
java_home_new=${text%%=*}=/data/jdk_1.9.0
h="'";
cmd="sed -i ${h}${line}c ${java_home_new}${h} test.sh"
eval ${cmd}

说明:

1. 先用 grep -n 获得要替换的行号内容

2. 用 awk 分别获得行号 line 和内容 text

3. 内容 text = 后面替换为新内容 /data/jdk_1.9.0

4. sed 要替换的变量里有空格和特殊字符 '/',所以先拼成 cmd,再用 eval 执行

posted @ 2017-08-17 10:19  湖风雨晚晴  阅读(3354)  评论(0编辑  收藏  举报