繁体   English   中英

如何将bash变量全部改为小写sed

[英]How to change all bash variables to lowercase in sed

我有数百个 bash 脚本,它们具有像这样的大写变量

#!/bin/bash

FOO=bar
RED=blue
UP=down

我像这样把它们变成小写

for var in FOO RED UP
do
    grep -rl '\<$var\>' | xargs sed -i 's/\<$var\>/$(echo "$var" | tr '[:upper:]' '[:lower:]')/g"
done

现在我遇到了有数百个变量 declerations 的文件,并且复制粘贴每个文件变得太困难了。 我试过像这样自动化这个过程

grep -rl '\w*=[^=]' | xargs sed -E "s/(\w*)=([^=])/$(echo \1 | tr '[:upper:]' '[:lower:]')=\2/g"

但问题在于$(echo \1...)显然会失败

有没有办法快速找到所有变量并使用正则表达式转换为小写?

编辑:

根据要求,假设我们有 1 个这样的文件

#!/bin/bash

AAA="hello world"
AAB="hello world"
...
ZZZ="hello world"

并假设我有大量(> 10000)嵌套(在目录或子目录中)像这样

#!/bin/bash

echo $AAA
echo $AAB
...
echo $ZZZ
if [ $AAA == "foo" ]
then
    #do something
fi

我想搜索任何赋值( \w*=[!=] ),然后对该变量进行单词替换以使其小写。 注意if条件,我通过那里的那个来表明可能存在一个单词后跟 2 个等式的情况,但我们只匹配 1 个等式(没有空格)

编辑 2:请注意,我只想将变量名转换为小写,而不是所有的

# Current Input
SOME_VAR="Humpty Dumpty had a great FALL"

# Desired Output
some_var="Humpty Dumpty had a great FALL"

唯一对我有用的解决方案是 go 通过三个步骤将变量名替换为小写

 # Change all SOME_VAR=... to some_var=...                                 
 grep -rl '\w\+=' | xargs sed -i 's/\w\+=/\L&/g'                             
                                                                             
 # Change all $SOME_VAR to $some_var                                         
 grep -rl '$\w\+' | xargs sed -i 's/$\w\+/\L&/g'                             
                                                                             
 # Change all ${SOME_VAR} to ${some_var}                                     
 grep -rl '$\w\+' | xargs sed -i 's/${\w\+}/\L&/g'

然后我回去把几个环境变量改回大写

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM