Bash实现aliase.txt中Alias续行合并与格式转换方法
Bash处理Alias文件格式化方案
直接用awk单命令即可完成全流程处理,大文件处理效率高,无额外依赖,完整命令如下:
awk ' # 处理反斜杠续行拼接 /\\$/ { sub(/\\$/, "") buf = buf $0 next } { cur_line = buf $0 buf = "" # 仅筛选前缀为Alias的条目,排除H_Alias、Port_Alias等其他类型 if (cur_line !~ /^Alias[[:space:]]+"/) next # 提取双引号包裹的别名 match(cur_line, /"([^"]+)"/, name_arr) alias = name_arr[1] # 截取等号后的所有数值段 sub(/^[^=]+=[[:space:]]*/, "", cur_line) # 按逗号分割数值,逐行输出 split(cur_line, val_arr, /,[[:space:]]*/) for (idx in val_arr) { if (val_arr[idx] ~ /^[0-9]+$/) { # 别名与数值间默认保留6个空格缩进,可按需调整空格数量 printf "%s %s\n", alias, val_arr[idx] } } } ' aliase.txt > formatted_alias.txt
处理逻辑说明
- 续行兼容:自动识别行尾反斜杠的续行标记,去掉反斜杠和换行拼接为完整单行,支持任意多行的续行场景,自动过滤续行前固定的10个空格缩进
- 条目过滤:仅匹配行首为
Alias+空白+双引号的合法条目,自动跳过其他前缀的别名类型 - 格式输出:拆分逗号分隔的所有数值,每个数值单独和别名配对成行,缩进长度可修改
printf语句中的空格数自定义
处理效果示例
输入的多行续行内容:
Alias "Aliasname" = 1, 2, 3 \ 4, 5, 6
处理后输出:
Aliasname 1 Aliasname 2 Aliasname 3 Aliasname 4 Aliasname 5 Aliasname 6
完全符合要求的输出格式。
内容的提问来源于stack exchange,提问作者Elias
相关产品推荐
相关产品推荐

