[英]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.