如何用awk替换符号所有出现?及转换输出为properties格式
嘿,这两个awk的问题我熟,给你一步步讲清楚:
1. 如何使用awk替换某个符号的所有出现?
awk里做全局替换最常用的就是gsub()函数,它会把目标文本里所有匹配到的符号都替换掉,语法很简单:
gsub(/要替换的符号/, "替换后的内容", 目标范围)
- 如果省略第三个参数,默认会处理当前整行(也就是
$0) - 如果要替换的是正则里的特殊字符(比如
.、*、+这些),记得加反斜杠转义
举几个实用例子:
- 把文本里所有的逗号
,换成竖线|:awk '{gsub(/,/, "|"); print}' your_input_file.txt - 把所有的点号
.换成横杠-(注意点号要转义):awk '{gsub(/\./, "-"); print}' your_input_file.txt
2. 将Key: Value格式转换为Key=Value格式(适配.properties文件)
你的需求是把Key: Value Key: Value ...这种格式转成Key=Value,还要适配.properties文件(一般是每行一个键值对),分两种场景给你方案:
场景1:保留原有行结构,只替换格式
如果只是把每行里的Key: Value直接转成Key=Value,不需要拆分行,直接用gsub()替换: (冒号加空格)为=就行:
awk '{gsub(/: /, "="); print}' your_input.txt > output.properties
比如输入行是Name: Alice Age: 25,执行后会变成Name=Alice Age=25。
场景2:拆分每个键值对为单独一行(更符合.properties规范)
如果想让每个Key=Value占一行,贴合.properties文件的标准格式,可以遍历每行的每个字段,替换后单独打印:
awk '{ for (i = 1; i <= NF; i++) { # 遍历每行的每个字段 gsub(/: /, "=", $i) # 把当前字段的": "换成"=" print $i # 打印处理后的字段 } }' your_input.txt > output.properties
这样输入行Name: Alice Age: 25会变成:
Name=Alice Age=25
完美适配.properties文件的格式~
内容的提问来源于stack exchange,提问作者Boris Borovski
相关产品推荐
相关产品推荐

