在shell怎么替换指定位置的字符

longyi000000 2012-02-20 03:40:01
如:


config.xml

user=user
passwd=passwd
age=age


我现在要从config.xml文件中读取user,passwd,age的值

注:等号左边的user是属性名称 等号右边的是属性值(可配)

现在需要实现的功能就是通过用户的手动输入来替换等号右边的属性值 等号左边的属性名称不变

如:用户手动输入了user的值为“AAA”
config.xml 改变为:

user=AAA

如何解决 谢谢各位大侠!
...全文
903 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
longyi000000 2012-02-26
  • 打赏
  • 举报
回复
awk -F= '{if(match("user", $1)){gsub($2, "AAA")}; print $0}' filename

结果是一样的啊 也是连属性名称和属性值一起更改了啊
nevil 2012-02-23
  • 打赏
  • 举报
回复
awk -F= '{if(match("user", $1)){gsub($2, "AAA")}; print $0}' filename
longyi000000 2012-02-22
  • 打赏
  • 举报
回复
awk 是可以 但是他把上述的属性名称和值都替换了 我现在要求只是替换值
wzb56 2012-02-22
  • 打赏
  • 举报
回复
这种分字段的,文本文件的操作,似乎awk 更擅长!!!
qq120848369 2012-02-20
  • 打赏
  • 举报
回复
[liangdong@jx-csblog01.jx.baidu.com shell]$ ./test.sh a=2 b=3 c=4 a.txt 
[18:45:08] tty:[2] jobs:[0] cwd:[~/shell]
[liangdong@jx-csblog01.jx.baidu.com shell]$ cat a.txt
a=2
b=3
c=4
d=1
[18:45:10] tty:[2] jobs:[0] cwd:[~/shell]
[liangdong@jx-csblog01.jx.baidu.com shell]$ cat test.sh
#!/bin/bash

if [ "$#" -lt 2 ];then
echo "usage : ./test.sh [key=val]+ xml_file_name";
fi

# number of key_vals
key_val_num=`expr $# - 1`;

# get the input xml_file_name
eval xml_file_name='$'{$#};

if ! [ -f "$xml_file_name" ];then
echo "xml file name invalid...";
exit 1;
fi

# store in array
key_val=($@);

# replace
for (( ndx=0; ndx!=$key_val_num; ++ndx ));do
eval elems='$'{key_val[$ndx]};
key=${elems%=*};
val=${elems#*=};
sed -i -r "s/($key=).*/\1$val/g" $xml_file_name;
done


这样就可以, 再具体的自己改改吧.

2,161

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 UNIX文化
社区管理员
  • UNIX文化社区
  • 文天大人
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧