sed用模式替换大写字母

时间:2014-03-12 05:40:54

标签: regex sed

我有一个xml文件,其中包含以下行:

android:background="@drawable/WhiteButtonSelector"

我需要用下划线和小写字符替换大写字母。 例如,上面的示例字符串必须是:

android:background="@drawable/white_button_selector"

只能替换双引号中的文字。没有drawable的行必须保持不变。

2 个答案:

答案 0 :(得分:1)

sed '/drawable/{s/"[^"]*"/\n&/g;h;s/[^"\n]*\(\n"[^"]*"\)[^"\n]*/\1/g;s/[A-Z]/_/g;H;g;:a;s/\n"[^"]*"\(.*\n\)\n\("[^"]*"\)/\2\1/;ta;s/\n//}' file
  • 检查" drawable"在线
  • 其余的,我提到了this answer

***在OS X中,可以使用gsed

将其安装为brew install gnu-sed

答案 1 :(得分:0)

这可能适合你(GNU sed):

sed -r '/drawable/{h;s/\b[A-Z]/\l&/g;s/\B[A-Z]/_\l&/g;G;s/.*(".*").*\n(.*)".*"/\2\1/}' file

将流程限制在其中包含drawable的行。

制作该行的副本,然后在单词的开头用大写和大写替换大写和大写字母的大写。

将原始行与已处理行组合,并通过替换构成一个新行。

N.B。这期望每行一个这样的变量。