我正在嘗試查找包含以特定字串開頭的行的所有檔案,然后將該行中的所有內容設定為小寫。我能夠做我想做的部分事情,但似乎無法弄清楚如何讓這一切正常作業。
這是我要查找的字串的示例:
_assetBundleName: SomeDirectory/ChildDirectory
我需要它是:
_assetBundleName: somedirectory/childdirectory
所以我不能將整行轉換為小寫,只是我要查找的字串之后的所有內容(即_assetBundleName: )。而且我需要對許多檔案(運行命令的所有目錄和子目錄)執行此操作。
sed 's/[a-z]/\L&/g'將所有內容都轉換為小寫,而不僅僅是我找到的字串之后的所有內容。
uj5u.com熱心網友回復:
您可以將其gnu-sed與 2 個捕獲組一起使用:
sed -E 's/(_assetBundleName:)(.*)/\1\L\2/' file
\L\2將僅將第二個捕獲組內容小寫。
如上所述,這需要gnu-sed. 如果你沒有,那么你可以使用這個awk命令:
awk 'BEGIN {FS=OFS=":"}
$1 ~ /_assetBundleName/ {$2 = tolower($2)} 1' file
uj5u.com熱心網友回復:
使用sed
$ sed '/_assetBundleName:/s/:.*/\L&/' input_file
或者
$ sed "/_assetBundleName:/s/\(.*\)\(:.*\)/echo '\1'\$(echo \\2 | tr 'A-Z' 'a-z')/" file | bash
輸出
_assetBundleName: somedirectory/childdirectory
uj5u.com熱心網友回復:
Perl 解決方案:
perl -i -pe 's{(_assetBundleName:)(.*)}{$1\L$2}' file1 file2 ...
Perl 單行器使用這些命令列標志:
-e:告訴 Perl 查找行內代碼,而不是在檔案中。
-p:一次回圈輸入一行,$_默認情況下將其分配給。print $_在每次回圈迭代后添加。
-i:就地編輯輸入檔案(覆寫輸入檔案)。
-i.bak:就地編輯輸入檔案(覆寫輸入檔案)。在覆寫之前,通過在其名稱后附加擴展名來保存原始檔案的備份副本.bak。
s{PATTERN}{REPLACEMENT}: 替換PATTERN為REPLACEMENT.
.*: 任意字符,重復 0 次或多次。
$1, $2:第一個和第二個捕獲組,用括號捕獲。
\L$2:小寫第二個捕獲組中的所有內容。
還請參見
perldoc perlrun::如何執行 Perl 解釋器:命令列開關
perldoc perlre:Perl 正則運算式(正則運算式)
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/474190.html
上一篇:在終端的檔案中更改縮進的多行字串
