bash - 将终端中同一位置的不同短语大写

标签 bash perl text awk sed

我有很多 .py 文件,其中包含这样一行:

self._cols = [self.foo.bar.relevant_string.str()]

我需要将 relevant_string 大写,才能得到这个

self._cols = [self.foo.bar.RELEVANT_STRING.str()]

总共约有 100 个。

有没有办法用 bash/awk/perl 做到这一点?我试过这样的事情

perl  -pe 's/self.foo.bar./uc($&)/e' *.py

但是它把捕获的区域大写了,而不是后面的部分。

最佳答案

使用 GNU sed:

$ echo 'self._cols = [self.foo.bar.relevant_string.str()]' |
    sed -E 's/(self\.foo\.bar\.)([^.]+)/\1\U\2/'
self._cols = [self.foo.bar.RELEVANT_STRING.str()]

关于bash - 将终端中同一位置的不同短语大写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55399445/

相关文章:

perl - 为什么此行返回整数 1-10 的总和?

regex - Lua文本解析、空格处理

c - 如何禁止可执行文件读取/修改给定目录以外的任何文件?

linux - 如何将shell变量传递给shell脚本中的awk命令

regex - Perl 正则表达式 多个捕获组

image - 如何防止文本在图形和表格之间爬行

java - 带有桌面应用程序示例功能的 Java 文本编辑器

bash - 您最重要的控制台别名是什么?

linux - 不使用 awk 或 sed 对字符串进行排序

perl - 避免在命令行输入密码(sudo)