簡體   English   中英

使用sed,awk,grep轉換文本

[英]Convert text, using sed, awk, grep

我無法解決問題。 我有一個包含電子郵件地址的文本。 我需要此文件以井號更改地址。

例如:

bla bla bla example{at sign}gmail.com > #######{at sign}#####.###

您可以像這樣使用sed:

sed -r 's/(^| )[^ @]+@[^ ]+/\1#########@#####.###/g' file
Each message has exactly one header, which is structured into fields. #########@#####.### Each field has a name and a value. #########@#####.### RFC 5322 specifies the precise syntax #########@#####.### .

問題是您如何知道您是否有電子郵件地址。 您可以假設使用/[\\.\\w]+@[\\.\\w]+\\.\\w+/的模式,但其中可能包含電子郵件以外的內容。 您要保留長度,還是一般性地替換它:

  • david@foo.com => #####@###.###
  • robert.brown@buffy.fu => ############@#####.##

要么

  • david@foo.com => #################@##################.###
  • robert.brown@buffy.fu => #################@##################.### robert.brown@buffy.fu

后者可能是不要用的sed使用s/[\\.\\w]+@[\\.\\w]+\\.\\w+/#################@##################.###/ 請注意, sed隨系統的不同而不同-特別是關於sed可以接受的正則表達式語法類型。 sed至少可以使用三種正則表達式:過時(或RE Classic ),現代(包括一些擴展)和擴展(例如Perl和Python)


在Mac OS X上測試-Mavericks

sed -E 's/\s*[[:alnum:]\.]+@[[:alnum:]\.]+\.[[:alnum:]]+\s*/######@#####.###/g' rfc-5322.txt

我在RFC-5322上進行了測試

這是一個awk解決方案

echo "test my@email.com vow" | awk  '{split($0,a,"@");f=split(a[1],x," ");for (i=1;i<=(length($f));i++) s=s "#";$f=s}1'
test ############ vow

它保留長度,但可能會破壞不是電子郵件的任何內容,並且帶有@


這對於使用多封電子郵件可能會更好:

awk '{gsub(/[^@ ]+@[[:alnum:]]+.[[:alnum:]]+/,"#########")}1' file

丑陋的oneliner會更改文件的位置:

$ cat text
Each message has exactly one header, which is structured into fields. firstemail@gmail.com Each field has a name and a value. secondmail@gmail.com RFC 5322 specifies the precise syntax thirdmail@gmail.com
$ < text egrep -o "\b[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,4}\b"  | sort -u | ( while read b ; do echo "s/$b/$(tr a-z0-9_%+-. \# <<< ${b%@*})@$(tr a-z0-9_%+- \# <<< ${b#*@})/g" ; done ) | xargs -n1 -I{} sed -i,bak {} text
$ cat text
Each message has exactly one header, which is structured into fields. ##########@#####.### Each field has a name and a value. ##########@#####.### RFC 5322 specifies the precise syntax #########@#####.###

我從這里獲取了電子郵件正則表達式。 我還假定電子郵件左側的一個點也應該被混淆: first.name@gmail.com --> #########@#####.###

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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