[英]Using sed to replace a part of a string that is unknown
我有一個文本文件:
example.txt
UserName = JIU62H123;
USER_NAME = JIU62H123;
我需要將JIU62H123
更改為A5B4C6DF9
。 顯然,對於此文件,我可以這樣做:
//bash
sed -i '' 's/JIU62H123/A5B4C6DF9/g' example.txt
從結果中可以看出,這適用於此文件:
example.txt
UserName = A5B4C6DF9;
USER_NAME = A5B4C6DF9;
但是,實際上,我不知道用戶名是否真的提前。 我所知道的是文件的形狀如下:
example.txt
UserName = <some_letters_and_numbers>;
USER_NAME = <some_letters_and_numbers>;
我基本上需要將<some_letters_and_numbers>
更改為A5B4C6DF9
。 可以使用一個或多個sed
命令完成此操作嗎?
如何使用正則表達式?
sed -ir 's/^(USER_NAME|UserName) = [A-Za-z0-9]+;$/\1 = A5B4C6DF9;/g' example.txt
UserName
或USER_NAME
開頭,后跟等號=
, sed
語法: 使用變量來適應
newId=A5B4C6DF9
sed -e '/^U\(serName\|\SER_NAME) *=/s/= .*$/'$newId/ -i example.txt
注意引用部分在變量之前!
直到$newId
都不包含特殊字符。 如果變量可以包含空格或其他非字母數字字符,請使用雙引號:
sed -e '/^U\(serName\|\SER_NAME) *=/s/= .*$/'"$newId"/ -i example.txt
使用awk,您可以:
$ awk '{$3="A5B4C6DF9;"}1' file
UserName = A5B4C6DF9;
USER_NAME = A5B4C6DF9;
即。 替換第三個空格分隔的字段。 使用最新的GNU awk,您可以進行就地編輯:
$ awk -i inplace '{$3="A5B4C6DF9;"}1' file
要將change <some_letters_and_numbers> to A5B4C6DF9
並假設您打算on the right side of "= "
帶有on the right side of "= "
-E
on the right side of "= "
的sed的sed on the right side of "= "
添加on the right side of "= "
,這是針對ERE的:
$ sed -E 's/= [[:alnum:]]+/= A5B4C6DF9/' file
UserName = A5B4C6DF9;
USER_NAME = A5B4C6DF9;
以及任何POSIX sed:
$ sed 's/= [[:alnum:]][[:alnum:]]*/= A5B4C6DF9/' file
UserName = A5B4C6DF9;
USER_NAME = A5B4C6DF9;
非常感謝您的回答,每個人都贊成。 我最終做了這樣的解決方案:
sed -i '' -E 's/(DEVELOPMENT_TEAM|DevelopmentTeam)( = )(.*)/\1\2A5B4C6DF9;/' example.txt
此處給出的大多數答案似乎都與字母/數字模式匹配,但我認為最好將其與任何內容匹配並用所需的內容替換。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.