Regular-Expression

特別是小寫的電子郵件地址

  • July 27, 2019

範例(隨機)文本:

StackOverflow@icloud.com:Portuguesa-Span103
StackOverflow@gmail.com-Snip1031
Stackoverflow@icloud.com:Sanchismo103

期望的輸出:

stackoverflow@icloud.com:Portuguesa-Span103
stackoverflow@gmail.com-Snip1031
stackoverflow@icloud.com:Sanchismo103

通常這是我傾向於使用的電子郵件地址正則表達式,

[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}

我希望該命令查找所有電子郵件地址並簡單地將它們小寫,而不管每一行的格式如何。同時仍保持該行其餘部分的正常大小寫(除了電子郵件地址之外沒有其他任何內容髮生更改)。

我首選使用的工具是 bash(和相關工具),我自己目前還沒有嘗試過這樣做,因為我不知道從哪裡開始。

我正在使用 Gnu/Cygwin。

當您使用 GNU sed 時,您可以使用:

sed -e 's/^\([^@]*\)@/\L\1@/' file

這會將從行首@到第一個的所有內容轉換為小寫。例如

$ sed -e 's/^\([^@]*\)@/\L\1@/' input.txt
stackoverflow@icloud.com:Portuguesa-Span103
stackoverflow@gmail.com-Snip1031
stackoverflow@icloud.com:Sanchismo103

如果電子郵件地址不在每行的開頭,和/或如果一行上可能有多個電子郵件地址,您將使用\b而不是^將搜尋和替換錨定到單詞邊界標記而不是開頭線:

sed -e 's/\b\([^@]*\)@/\L\1@/g' input.txt

引用自:https://unix.stackexchange.com/questions/532442