Android的TexView的TextSize统一从sp单位替
2025-02-06 本文已影响0人
Young岛主
使用脚本替换安卓布局XML文件,textSize从sp单位替换为mm单位
#!/bin/bash
# 示例输入文本
# input_text='这是一个 "10sp" 的示例,还有 "25sp" 和 "5.0sp" 等。'
# 使用 perl 进行替换操作
# output_text=$(echo "$input_text" | perl -pe 's/"([0-9.]+)sp"/sprintf("%.1fmm",($1\/2.5))/ge')
# 输出替换后的文本
# echo "$output_text"
# 检查是否提供了目录参数
if [ $# -ne 1 ]; then
echo "用法: $0 <目录路径>"
exit 1
fi
# 获取指定的目录路径
target_dir="$1"
# 检查目录是否存在
if [ ! -d "$target_dir" ]; then
echo "指定的目录 $target_dir 不存在。"
exit 1
fi
# 递归遍历目录及其子目录下的所有 XML 文件
find "$target_dir" -type f -name "*.xml" | while read -r xml_file; do
# 使用 perl 进行替换操作并直接修改文件
perl -i -pe 's/"([0-9.]+)sp"/sprintf("\"%.1fmm\"", $1\/6.35)/ge' "$xml_file"
echo "已处理文件: $xml_file"
done
echo "所有 XML 文件处理完成。"
脚本解释
- 参数检查
if [ $# -ne 1 ]; then
echo "用法: $0 <目录路径>"
exit 1
fi
该部分代码用于检查脚本运行时是否传入了一个参数。若没有提供或者参数数量不正确,脚本会输出使用说明并退出。
- 获取并检查目标目录
target_dir="$1"
if [ ! -d "$target_dir" ]; then
echo "指定的目录 $target_dir 不存在。"
exit 1
fi
此部分获取用户输入的目录路径,并检查该目录是否真实存在。若目录不存在,脚本会输出错误信息并终止执行。
- 递归查找 XML 文件
find "$target_dir" -type f -name "*.xml" | while read -r xml_file; do
...
done
利用 find 命令递归地在指定目录及其子目录中查找所有扩展名为 .xml 的文件。通过管道将找到的文件路径传递给 while 循环进行后续处理。
- 对 XML 文件进行内容替换
perl -i -pe 's/"([0-9.]+)dp"/sprintf("\"%.1fmm\"", $1 / 2.5)/ge' "$xml_file"
对于每个找到的 XML 文件,使用 perl 命令进行替换操作。-i 选项表示直接修改文件内容。正则表达式 s/"([0-9.]+)dp"/sprintf(""%.1fmm"", 1 / 2.5):sprintf 是格式化输出函数,%.1f 表示将捕获到的数字 $1 除以 2.5 后保留小数点后 1 位,然后拼接上 "mm",并在前后加上双引号。
g 标志:表示全局替换,会对文件中所有匹配的字符串进行替换。
e 标志:允许在替换部分执行 perl 代码,实现数值计算。
- 输出处理信息
echo "已处理文件: $xml_file"
在每次完成一个文件的处理后,输出该文件的路径信息,让用户了解处理进度。
- 处理完成提示
echo "所有 XML 文件处理完成。"
当所有符合条件的 XML 文件都处理完毕后,输出完成提示信息。
使用方法
将上述脚本保存为一个文件,例如 process_xml.sh。
为脚本添加执行权限:
chmod +x process_xml.sh
运行脚本并指定要处理的目录路径:
./process_xml.sh /your/target/directory
将 /your/target/directory 替换为你实际想要处理的目录路径即可。运行脚本后,该目录及其子目录下所有 XML 文件中符合条件的字符串都会被替换。