regex - 如何使用 AWK 从字符串中删除所有小写字符?

标签 regex linux awk

请注意,我需要 AWK 中的这个答案。

如何从某些 awk 变量中删除所有小写字符?我试着调用 gsub:

gsub(/[a-z]+/,"",varName);

不幸的是,这会删除整个字符串,就好像 awk 无法区分小写和大写一样。是否有一些我不知道的可以使用的正则表达式?

编辑:确认,awk 看不出小写和大写字符之间的区别。

示例 1(将在此处使用字母 f 以便更好地理解结果):

varName="CHRFProtocol";
gsub(/[a-z]/,"f",varName);

结果:ffffffffffff

示例 2(同样,此处将使用字母 f 以便更好地理解结果):

varName="CHRFProtocol";
gsub(/[A-Z]/,"f",varName);

结果:ffffffffffff

这是合法的吗?在做什么?

最佳答案

您的语言环境设置有问题。试试这个:

LC_ALL=C awk 'BEGIN { 
varName="CHRFProtocol";
gsub(/[a-z]/,"f",varName);
print(varName); }'

GNU awk 支持语言环境设置,在 Linux 上的大多数国家语言环境中,正则表达式不区分大小写。在 awk 命令执行期间将语言环境重置为 C (=POSIX) 可恢复区分大小写。

关于regex - 如何使用 AWK 从字符串中删除所有小写字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18113684/

相关文章:

linux - 在 tcsh shell 脚本中从 bash 获取最后一个命令行条目

linux - 在 3 个目录 Ubuntu 中创建多个目录

regex - BASH:搜索字符串并准确显示子字符串在其中出现的确切次数

javascript - 如何使用正则表达式在 javascript 中链接 unicode 数字

mysql - 为什么不 [ :blank:] work in MySQL

linux - 为什么这个 shell 管道会退出?

regex - 使用跨不同行匹配的大括号重新格式化和清理 CSV 文件

bash - 使用 awk 匹配特定的字母重复模式

ruby - 如何在 ruby​​ 的正则表达式中执行此操作?

r - 需要正则表达式逻辑