Linux shell multifile content replace with sed

#!/bin/bash

#                  Linux shell multifile content replace with sed
# 声明:
#     本源代码主要是利用两份(中、英文)具有相同键值对的json数据,对html内的中文进行
# 自动化文本替换的代码。
#
#                                        2015-11-20 晴 深圳 南山平山村 曾剑锋

# 得到中文部分
sed -n "/\"/p" SimpChinese.txt | grep -Po -e "\"\s?:\s?.*" | grep -Po -e ":\s?.*" | grep -o -e "\".*\"" > SimpChinese

while read chinese
do

    # 获取中文对应的id部分
    id=`grep "$chinese" SimpChinese.txt | grep -o -e "^.*:" | grep -o -e "\".*\"" | head -n 1`
    # 由id获取英文的部分
    english=`grep "$id" English.txt | grep -Po -e "\"\s?:\s?.*" | grep -Po -e ":\s?.*" | grep -o -e "\".*\"" | head -n 1`

    # 剔除双引号
    chinese=${chinese:1:-1}
    english=${english:1:-1}

    # 去掉两边的空格
    #chinese=`echo $chinese | sed "s/ *$//g"| sed "s/^ *//g"`

    # 追加到文件末尾
    echo "$chinese===$english" >> translate.txt

done < SimpChinese

# 将有些不在json键值对里的中文翻译加入translate.txt中
cat manualTranslate.txt >> translate.txt

while read ChEn
do

    # 获取中文,由于有些中文字符串有'/',并对其进行处理,主要是为了处理sed中'/'的特殊性
    chinese=`echo $ChEn | grep -o "^.*===" | sed "s/===//" | sed "s/ *$//g" | sed "s/^ *//g" | sed "s^\/^\\\\\\\\/^g"`
    english=`echo $ChEn | grep -o "===.*$" | sed "s/===//" | sed "s^\/^\\\\\\\\/^g"`

    # 匹配并修改html页面,[::!!??]是根据html中字符串的特征添加的内容
    sed -i -e "s/>\s*${chinese}[::!!??]\s*</>${english}</" rootfs/index.htm
    sed -i -e "s/>\s*${chinese}[::!!??]\s*</>${english}</" rootfs/set.htm
    sed -i -e "s/>\s*${chinese}[::!!??]\s*</>${english}</" rootfs/html/*

done < translate.txt

# 部分English.txt
# {
# "Right Limit" : "Set Right Limit",
# "Set Failed!": "Failed to set!",
# "Ok" : "Ok",
# "Cancel" : "Cancel",
# "Set Path" : "StoragePath",
# "Set PTZ" :" PTZ Settings ",
# "Auto-Scan" : "Scan",
# "Left Limit": "Set Left Limit",
# "Add" : "Add ",
# "Preset": "Preset",
# "Path" : "Path",
# "Browse":"Choose",
# "Set Succeeded!" :"Set successfully!",
# "Delete" : "Delete"
# }

# 部分SimpChinese.txt
# {
# "Set Path" : "设置存储路径",
# "Path" : "路径",
# "Browse" : "选择",
# "Set Succeeded!" : "设置成功!",
# "Left Limit" : "设置左边界 ",
# "Right Limit" : "设置右边界 ",
# "Preset" : "预置点 ",
# "Cancel" : "取消",
# "Set PTZ" : "云台设置 ",
# "Auto-Scan" : "线性扫描 ",
# "Delete" : "删除 "
# "Add" : "添加 ",
# "Set Failed!" : "设置失败!",
# "Ok" : "确定",
# }

 

时间: 2024-09-24 11:27:40

Linux shell multifile content replace with sed的相关文章

Linux shell编程基础 九、sed和awk

正则表达式 一个点(.)代表一个字符. 比如:.a. 代表3个字符,中 间一个字符是a,两边各一个任意字符. 比如:... 代表3个任意字符. 若 要匹配点(.)本身,则使用转义字符. 比如:my\... 代表my.后接两个字符. 行首匹配^ 行尾匹配$ [...] 代 表字符串中的一个字符. 比如:[abc] 代表a或b或c中的任意一个字符. 比如:[Mm]y 代表My或者my. ^出现在[]里,代表"非" 比如:[^a]代表 不是a *代表前面的字符有0个或者0个以上 比如:a*b

linux shell编程 sed指令问题

问题描述 linux shell编程 sed指令问题 在同一个目录下有两个文件oracle-ds.xml,postgresql-ds.xml 我分别执行指令 sed -n '/^ */p' oracle-ds.xml sed -n '/^ */p' postgresql-ds.xml 为什么oracle-ds.xml 的可以匹配到,而postgresql-ds.xml无法匹配到,两个文件都有 查了半天没弄懂,求指点 我粘下文件内容: oracle-ds.xml: Oracle9i 2330201

linux shell sed awk-linux shell替换(通过变量修改文档值)

问题描述 linux shell替换(通过变量修改文档值) 现有变量VAR= 1, 2,3,4为一个数组,去依次修改文档 例如: 1 2 3 4 5 6 7 8 9 中第二行第三列的数值,得到4个文档分别为: 1 2 3 1 2 3 1 2 3 1 2 3 4 5 1 4 5 2 4 5 3 4 5 4 7 8 9 7 8 9 7 8 9 7 8 9 该怎么用脚本实现?请大神指教 解决方案 这种用python脚本来做更容易点.

Linux shell脚本基础学习详细介绍(完整版)

Linux shell脚本基础学习这里我们先来第一讲,介绍shell的语法基础,开头.注释.变量和 环境变量,向大家做一个基础的介绍,虽然不涉及具体东西,但是打好基础是以后学习轻松地前提. 1. Linux 脚本编写基础 ◆1.1 语法基本介绍1.1.1 开头 程序必须以下面的行开始(必须方在文件的第一行): #!/bin/sh 符号#!用来告诉系统它后面的参数是用来执行该文件的程序.在这个例子中我们使用/bin/sh来执行程序. 当编辑好脚本时,如果要执行该脚本,还必须使其可执行. 要使脚本可

Linux shell脚本基础学习详细介绍(完整版)第1/2页_linux shell

Linux shell脚本基础学习这里我们先来第一讲,介绍shell的语法基础,开头.注释.变量和 环境变量,向大家做一个基础的介绍,虽然不涉及具体东西,但是打好基础是以后学习轻松地前提. 1. Linux 脚本编写基础 ◆1.1 语法基本介绍1.1.1 开头程序必须以下面的行开始(必须方在文件的第一行):#!/bin/sh符号#!用来告诉系统它后面的参数是用来执行该文件的程序.在这个例子中我们使用/bin/sh来执行程序.当编辑好脚本时,如果要执行该脚本,还必须使其可执行.要使脚本可执行:编译

Linux shell用法和技巧(转)

使用Linux shell是我每天的基本工作,但我经常会忘记一些有用的shell命令和l技巧.当然,命令我能记住,但我不敢说能记得如何用它执行某个特定任务.于是,我开始在一个文本文件里记录这些用法,并放在我的Dropbox里,现在,向大家分享这个文件.这个文件我会不断的更新.需要注意一点的是,有些用法需要在你的Linux系统里安装额外的软件. UPDATE: November 25, 2013 检查远程端口是否对bash开放: echo >/dev/tcp/8.8.8.8/53 &&

运维经验分享(七)-- Linux Shell之ChatterServer服务控制脚本第三次优化

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://dgd2010.blog.51cto.com/1539422/1677214 运维经验分享作为一个专题,目前共7篇文章 <运维经验分享(一)-- Linux Shell之ChatterServer服务控制脚本> <运维经验分享(二)-- Linux Shell之ChatterServer服务控制脚本二次优化> <运维经验分享(三)-- 解决Ubuntu下cro

运维经验分享(二)-- Linux Shell之ChatterServer服务控制脚本二次优化

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://dgd2010.blog.51cto.com/1539422/1674188 运维经验分享作为一个专题,目前共7篇文章 <运维经验分享(一)-- Linux Shell之ChatterServer服务控制脚本> <运维经验分享(二)-- Linux Shell之ChatterServer服务控制脚本二次优化> <运维经验分享(三)-- 解决Ubuntu下cro

一组Linux Shell Scripting小练习

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://dgd2010.blog.51cto.com/1539422/1718284 # Linux shell将字符串分割成数组 1 2 result=$(facter | awk '/ipaddress/ && !/ipaddress_lo/ {print $1 " " $3}') array=($result) # 判断一个变量是否存在(不是判断是否为空)