有时候我们会遇到这样一种情况:
一些字符串资源要从原始项目A移植到现在我们开发的项目B中
比如移植app名字
<string name="app_label">Calendar</string>
我们需要做的是:
在新项目对应的语言资源中查找是否有app_label这个资源。
有:则查看新旧资源是否一致
一致:则什么也不做
不一致:删除旧的,添加新的资源
没有:添加新的资源
工作内容很简单,但是,语言种类可能达到五六十种,移植的资源往往也不是一两个,所以工作量不可忽视
我觉得这种毫无技术含量的体力活还是交给脚本处理的好,为此特意写了个工具,希望能帮助大家提高效率
使用方法:
1.先将需要移植的资源的key统一放到一个文本中,用换行分隔。
比如:
$ cat /home/su1216/string_list app_name button_name company_name ……
注意:string_list这个文件如果是在windows下制作的,需要先将它转换成unix格式,方法如下:
用vi打开脚本,修改文件格式,命令如下
:set ff=unix
然后保存退出
2.然后执行下面命令即可:
merge_strings android_project_src android_project_dest /home/su1216/string_list
#!/bin/bash #example #merge_strings project_src/packages/apps/Settings project_dest/packages/apps/Settings string_list src_dir="$1" dest_dir="$2" string_list="$3" #确保list文件中含有\n,如果已经含有\n,那么不会再增加 sed -i -e '$a\' "$string_list" regex_with_all_string="" while read line; do regex_with_all_string=$regex_with_all_string"name=\"$line\"|" done < "$string_list" regex_with_all_string=${regex_with_all_string%|*} result_list=`grep -Pr "$regex_with_all_string" $src_dir/res/values*/*.xml` #echo "grep -Pr '"$regex_with_all_string"' $src_dir/res/values*/*.xml" if [ -f "results.txt" ]; then echo "rm results.txt first please." exit fi touch results.txt IFS_OLD=$IFS IFS=$'\n' for line in $result_list; do echo "${line#*res/}" >> results.txt done IFS=$IFS_OLD make_new_xml_file() { local country="$1" local folder=${country%/*} if [ ! -d "$dest_dir/res/$folder" ]; then mkdir "$dest_dir/res/$folder" fi local xml_path="$dest_dir/res/$country" touch "$xml_path" echo '<?xml version="1.0" encoding="utf-8"?>' > "$xml_path" #line1 echo '<resources>' >> "$xml_path" #line2 echo '</resources>' >> "$xml_path" #line3 } insert_line() { #</resources> 插入到这行之前 local string_file="$1" local line="$2" local trim_line=`echo $2 | grep -Po '\S.*\S'` local name=`echo $trim_line | grep -Po "(?<=name=\").*?(?=\")"` local line_no=`grep -n "\b$name\b" "$string_file" | grep -Po "^\d+"` #a.检查是否有这个字段 if [ "$line_no" != "" ]; then #echo "line_no=$line_no" "$string_file" local result=`grep -n "$trim_line" "$string_file"` #b.检查是否能完整匹配。如果不能,则删除旧的,添加新的 if [ "$result" = "" ]; then echo "sed command :""$line_no""d" sed -i "$line_no""d" "$string_file" sed -i '/<\/resources>/i\'"$line" "$string_file" fi else sed -i '/<\/resources>/i\'"$line" "$string_file" fi } #MERGE while read line; do country_new=`echo "$line" | grep -Po "^.*?\.xml"` string_file="$dest_dir/res/$country_new" line=`echo "$line" | grep -Po "(?<=:).*"` if [ ! -f "$string_file" ]; then make_new_xml_file "$country_new" fi #echo "$line" insert_line "$string_file" "$line" done < results.txt
转贴请保留以下链接
本人blog地址
相关推荐
字符串处理是BASH编程中的重要组成部分,它允许用户对文本数据进行操作,包括截取、替换、比较等。这篇博文将深入探讨BASH中的字符串处理技巧。 一、字符串定义与赋值 在BASH中,字符串可以被赋值给变量,常见的...
在Java编程语言中,文本字符串替换是一个常见的任务,特别是在处理大量文本数据时。这个"java 文本字符串替换工具"很可能是为了帮助开发者高效地搜索和替换文件中的特定文本内容。让我们详细了解一下如何在Java中...
在Linux系统中,Bash shell提供了一系列强大的命令来处理字符串,这些命令包括grep、sed、cut等。本文将详细介绍这些命令的功能、参数及其使用方法。 首先,让我们来看看grep命令。grep全称为Global Regular ...
bash写的字符串常用函数,这个可以看看。资源分就免了
- 可能提供批量处理功能,一次性处理多个Base64编码的字符串。 - 可能有错误检查机制,防止非Base64格式的字符串输入,或在解码过程中遇到错误。 - 显示原始文本和编码后的Base64字符串的比较,便于用户验证转换的...
Bash是GNU项目的一部分,是Linux和类Unix系统中最常用的Shell,它提供了更多的命令行工具和脚本编程功能。本文将深入探讨如何在Android设备上安装并使用Bash,以及它对终端和Term应用的影响。 首先,要在Android...
获取字符串中的特定字符或子字符串的方法有很多。 1. **使用 `tr -cd` 和 `wc -c`:** ```bash $ echo $var | tr -cd 'g' | wc -c 2 ``` 此命令组合用于统计字符串中出现的指定字符 `g` 的次数。 2. **使用 `...
当我们需要在大量文本文件中快速查找并替换特定字符串时,`sed`(Stream Editor)就是一个非常强大的工具。`sed` 是一个流编辑器,它可以从输入流(通常是文件或管道)中读取数据,对数据进行处理,然后将处理后的...
### Shell中字符串截取 在Shell脚本编程中,对字符串进行截取是常见的操作之一。通过对字符串的处理,可以实现各种数据解析、文件名提取等实用功能。本文将详细介绍几种常用的Shell中字符串截取方法及其应用场景。 ...
虽然JavaScript原生提供了很多字符串处理方法,但deline这样的库提供了特定场景下的优化解决方案。它简化了处理多行字符串的流程,使开发者能更加专注于应用的核心逻辑,而不是琐碎的字符串清理工作。 总的来说,...
### Shell脚本中计算字符串长度的五种方法...除了上述方法外,Shell脚本中还可能存在其他获取字符串长度的方式,例如使用 `sed`、`cut` 等工具结合起来实现。欢迎大家在评论区分享更多实用的技巧和建议,共同学习进步。
以上介绍了Shell中处理字符串的各种方法,从简单的值判断到复杂的字符串操作,这些技巧对于编写高效且功能丰富的脚本至关重要。熟练掌握这些操作可以帮助开发者更灵活地控制数据流和处理逻辑,从而提高脚本的质量和...
在C语言中,合并多个`char *`类型的字符串是一项常见的任务,这通常涉及到字符串操作和内存管理。在给定的场景中,`main.c`文件是测试程序,它调用了`tools.h`头文件中定义的`MultiCombine`函数,这个函数的目的是将...
在IT行业中,shell脚本是一种强大的工具,尤其在批量处理任务方面显得尤为高效。通过编写shell脚本,我们可以实现对字符串进行各种操作,自动化执行一系列命令行指令,从而提高工作效率。这篇博客“shell批量处理...
本文档详细介绍了Bash字符串操作中的参数扩展功能,该功能允许用户根据变量的值或是否存在来动态地替换变量值。参数扩展是Bash编程中常用的技术之一,尤其适用于编写脚本时变量处理。以下是根据文档内容总结的各个...
在Android平台上,GNU Bash的编译是一个相对复杂的过程,因为Android原生系统主要依赖于 BusyBox 中的ash或sh shell,这些shell相比GNU Bash功能较为有限。GNU Bash是一款功能丰富的命令行解释器,广泛用于Linux和...
本主题将深入探讨如何在批量任何文件中进行字符串查找替换,这涉及到多个技术层面,包括基本概念、实现方法以及相关的工具和编程语言应用。 一、基本概念 1. 字符串:在计算机科学中,字符串是由一个或多个字符...
在IT行业中,序列化和反序列化是数据传输和存储的关键环节,而PBJson就是一种针对protobuf(Protocol Buffers)格式的数据与Json格式...在实际项目中,我们需要根据需求选择合适的工具,以确保数据转换的准确性和效率。
### Shell中的字符串处理方法 #### 引言 在Shell编程中,字符串处理是一项重要的技能,尤其是在Linux环境下。本文将深入探讨几种高效的字符串处理技术,并通过实际示例展示这些技巧的应用场景。 #### 字符串截断 ...
在Linux或Unix环境中,Shell脚本是自动化任务和系统管理的强大工具。对于初学者和经验丰富的管理员来说,理解和掌握在Shell脚本中如何比较字符串和数值都是至关重要的技能。本教程将深入探讨这一主题,帮助你更好地...