我想創建一個bash腳本,搜索包含網絡登錄記錄的大文件,我想找到一個特定的用戶使用的無線主機。因此,我可以很容易地找到用戶多少次在登錄時:BASH:文件分隔符之間只搜索,而無需使用「切割」
echo "The user $user exists in the file $target $(cat $target | cut -d ' ' -f 1 | grep "\<$user\>" | wc -l) times"
其中$用戶更早由read user
和$目標定義在執行文件時,通過參數來定義。
作爲參考,有問題的文件的格式如下:
<user> pts/0 2014-02-03 12:13 (<ip>)
<user> pts/1 2014-02-04 23:56 (<ip>.wireless.xxx.xxx)
<user> pts/2 2014-02-04 23:39 (<ip>.wireless.xxx.xxx)
<user> pts/3 2014-02-04 22:09 (<ip>.wireless.xxx.xxx)
<user> pts/4 2014-02-04 23:59 (<ip>.wireless.xxx.xxx)
,我已經取代隱私的原因用戶名和完整的IP。用戶之後的間隔差異是爲了說明不同的用戶名長度。
因此基於關閉,我可以得到一個非常接近的答案:
echo "$user has used the following wireless hostnames:"
echo "$(grep "wireless" $target | grep "\<$user\>" | cut -d '(' -f 2 | cut -d ')' -f 1 | sort | uniq)"
(這裏我們假設沒有任何用戶名的包括「無線」,現在我只關心的主要錯誤)。如果由於某種原因,我想搜索用戶「2014」,例如,將返回所有的IP地址,即使沒有用戶的「2014」。當然,這只是一種形式,因爲沒有用戶名的將只有數字,不應衝突,但即使只是爲了學習,我寧願沒有這個問題。
所以我需要做的是當我有grep "\<user\>"
我需要它以某種方式搜索與用戶名列對應的分隔符''(空格)之前的第一個字段,而不實際切割(因爲我仍然需要ip) 。有沒有一種方法可以通過分隔符來指定grep來搜索?
----樣品的I/O ----
$ ./search.sh bigData
What username would you like to search for?
<user>
Total lines in <file>: 53984
The user <user> exists in the file <file> 79 times
<user> has used the following wireless hostnames:
<ip>.wireless.xxx.xxx
<ip>.wireless.xxx.xxx
<ip>.wireless.xxx.xxx
<ip>.wireless.xxx.xxx
請爲該示例輸入添加示例輸出到您的問題。 – Cyrus