簡體   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