如何用awk将private开头行等号右侧转小写,现有命令不生效原因查询
命令无效果的核心原因
tolower()是返回转换结果的函数,不会直接修改传入的参数。你仅执行tolower($2)没有把转换后的小写字符串赋值回$2,计算结果会被直接丢弃,不会修改行内容。- 你调用
gsub(/[-/]/, "_")时没有指定作用目标,默认会修改整行$0,而非你预期的等号右侧$2字段。 - 你没有指定输出字段分隔符
OFS='=',即使修改了$2,输出时字段也会默认用空格分隔,破坏原有的=分隔结构。
修正后可用命令
如果仅需要输出修改后的内容,执行以下命令:
gawk -F'=' '/^private/{$2 = tolower($2); gsub(/[-/]/, "_", $2)} 1' OFS='=' filename
如果需要直接修改原文件(gawk 4.1及以上版本支持),添加-i inplace参数即可:
gawk -i inplace -F'=' '/^private/{$2 = tolower($2); gsub(/[-/]/, "_", $2)} 1' OFS='=' filename
内容的提问来源于stack exchange,提问作者Sandra Schlichting
相关产品推荐
相关产品推荐

