2013-01-10 149 views
1

出於安全原因,我需要隱藏日誌文件中的IP地址。 IP地址是版本4和6如何隱藏,

IPv4的例子123.4.32.16x.x.x.x更換

IPv6的例子232e:23o5:te43:5423:5433:0000:ef09:23ffx:x:x:x:x:x:x:x替代的方式中的地址?

是否可以使用單個sed命令執行此操作?用sed替換目錄中的多個文件的文本

+0

是否所有的IPv6地址都是擴展形式?如果不是,這將是一個挑戰......(你想使用'sed','grep'只做正則匹配) – fge

+0

啊,我明白了。是的,IPv6地址是擴展形式。這裏的文章說,我們可以使用grep來處理這種情況:http:// vasir。net/blog/ubuntu/replace_string_in_multiple_files/ –

+0

然而,你會看到'grep'被傳送到'sed'; – fge

回答

2

您可能想要使用找到sed爲此。

讓我們假設你的日誌的擴展名爲 「.LOG」:

find /path/to/logs -type f -name '*.log' -exec  \ 
sed -i -e 's,[0-9]\+\(\.[0-9]\+\)\{3\},x.x.x.x,g' \ 
-e 's,[0-9a-f]\+\(:[0-9a-f]\+\)\{7\},x:x:x:x:x:x:x:x,gi' {} \; 

這是如何工作的?

  1. 首先,我們要求找到遞歸定位與.LOG擴展從/路徑開始的文件/到/日誌-type f告訴我們我們不想找到常規文件。

  2. 對於每個文件,它將執行sed-i參數告訴sed你想編輯文件。 (查看http://www.grymoire.com/Unix/Sed.html)解決方案使用findperl

+0

你的'find'命令也可以找到目錄;) – fge

+0

好,有效的點。加上「-type f」=) – brain

+0

@brain:你說「-type f告訴我們找不到常規文件」,你的意思是常規的文本文件嗎? –

0

一:

find /the/directory -type f -exec perl -pi -e ' 
    s/\b\d{1,3}(\.\d{1,3}){3}\b/x.x.x.x/g; 
    s/\b[a-f\d]{1,4}(:[a-f\d]{1,4}){7}\b/x:x:x:x:x:x:x:x/gi' {} \; 

(在一行中鍵入)

0

嗯,首先你應該只是解決什麼是做日誌記錄記錄你想要的方式。

現在,如果你需要回去和修改的歷史文件,您可以考慮使用sed

sed -e 's/\b(\d{1,3}\.){3}\d{1,3}\b/x.x.x.x/' /path/to/file 
sed -e 's/\b([:xdigit:]{4}:){7}[:xdigit:]{4}\b/x.x.x.x.x.x.x.x/' /path/to_file 
+0

'{0,3}'?你確定? ;) – fge

+0

糟糕..更正了 –

+0

此外,IPv6是十六進制(而'sed'有'/ i')。 – fge

0

我用這個:

find . -name "*.log" -exec grep -izl PATTERN {} \; | xargs perl -i.orig -e -n 's/PATTERN/REPLACEMENT/g'

你想要插入你的模式( s),並根據您的日誌文件的名稱將* .log替換爲其他內容。

-i.orig備份替換爲.orig擴展名的文件。

我發現這比我嘗試的其他東西相對更快。找到/ grep組合來識別候選人,然後perl來完成這項工作。