求助:想用sed或awk来实现文件中的字符串替换

青春不谢 2015-06-01 01:30:37
linux服务器上有1个语言包文件language.txt,里面是一些词条(共有几百行),每行都是类似这样的 130000=Happy Children's Day。还有一个文件modify.txt,里面也是用上述格式写的词条,但是只包含需要替换的内容,等号左边的数字都不是连续的。比如,130000=Happy Teacher's Day, 150000=Happy xxx Day。如果是手动去替换,那就是在language.txt中寻找modify.txt中列出的数字,然后替换掉等号后面的字符串。但是这样太麻烦,能用脚本语言实现这个重复的工作吗?给出指令后还烦请解释一下是什么意思,多谢各位大神!
...全文
919 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
dyhyh5 2018-06-27
  • 打赏
  • 举报
回复
[root@localhost hns]# echo "c0:a8:02:e2:00:01"|awk 'BEGIN{FS=OFS=":"}$4="88";$5="77";$6="66"'|awk 'NR==3{print}'
c0:a8:02:88:77:66
existmars 2015-06-25
  • 打赏
  • 举报
回复
引用 1 楼 Windeal 的回复:

#!/bin/sh

while read line
do
    number=`echo $line | awk -F '=' '{print $1}'`

    FS=' ''
    sed -i 's/^${num}=.*$/$line/' language.txt
done < modify.txt

number=`echo $line | awk -F '=' '{print $1}'` 这个不应该是num=`echo $line | awk -F '=' '{print $1}'`吗?
nswcfd 2015-06-25
  • 打赏
  • 举报
回复
引用 3 楼 lyl2725 的回复:
join -t "=" -a 1 -j 1 file1 file2 | awk 'BEGIN{FS="="}{ if( NF > 2) print $1 "=" $3; else print $0}' 用join命令可以达到数据库中两个表之间的关联效果;谁用谁知道啊,很强大。
确实join很强大! 注意需要文件按关键字排序(默认字段1)。
nswcfd 2015-06-25
  • 打赏
  • 举报
回复
#1楼的sed命令不能用单引号,因为要进行shell变量替换,此外如#4楼支持的,变量名num和number不匹配。
青春不谢 2015-06-25
  • 打赏
  • 举报
回复
引用 4 楼 existmars 的回复:
[quote=引用 1 楼 Windeal 的回复:]

#!/bin/sh

while read line
do
    number=`echo $line | awk -F '=' '{print $1}'`

    FS=' ''
    sed -i 's/^${num}=.*$/$line/' language.txt
done < modify.txt

number=`echo $line | awk -F '=' '{print $1}'` 这个不应该是num=`echo $line | awk -F '=' '{print $1}'`吗? [/quote]把number改成num有什么区别吗?
lyl2725 2015-06-15
  • 打赏
  • 举报
回复
join -t "=" -a 1 -j 1 file1 file2 | awk 'BEGIN{FS="="}{ if( NF > 2) print $1 "=" $3; else print $0}' 用join命令可以达到数据库中两个表之间的关联效果;谁用谁知道啊,很强大。
轮子学长 2015-06-01
  • 打赏
  • 举报
回复

#!/bin/sh

while read line
do
    number=`echo $line | awk -F '=' '{print $1}'`
    FS=' '
    sed -i 's/^${num}=.*$/$line/' language.txt
done < modify.txt

轮子学长 2015-06-01
  • 打赏
  • 举报
回复

#!/bin/sh

while read line
do
    number=`echo $line | awk -F '=' '{print $1}'`
    FS=' ''
    sed -i 's/^${num}=.*$/$line/' language.txt
done < modify.txt

19,612

社区成员

发帖
与我相关
我的任务
社区描述
系统使用、管理、维护问题。可以是Ubuntu, Fedora, Unix等等
社区管理员
  • 系统维护与使用区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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