簡體   English   中英

使用sed替換未知字符串的一部分

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

用真實的話說:

  • 在以UserNameUSER_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM