首页 > 解决方案 > 如何用awk小写文件的一部分?

问题描述

我有很多文件,其中包含诸如

local1 = "AAA"
private = "Filename_With_Uppercase"

我想将等号的右侧更改为仅小写。但仅适用于以 . 开头的行private

如果我做

gawk -F'=' '/^private/{gsub(/[-/]/, "_"); tolower($2)} 1' filename

然后它不会改变任何东西......

问题

谁能弄清楚为什么等号的右侧没有转换为小写?

标签: awk

解决方案


为什么等号的右侧没有转换为小写?

tolower(string)功能确实

返回 string 的副本,字符串中的每个大写字符都替换为其对应的小写字符。非字母字符保持不变。

因此,您需要将其分配回去以获得可见的效果,$2=tolower($2)而不是仅仅tolower($2)将 FS 设置为 OFS 以避免替换= ie

'BEGIN{FS=OFS="="}/^private/{gsub(/[-/]/, "_");$2=tolower($2)} 1'

推荐阅读