grep 獲取 字串 [論壇 - Ubuntu 程式設計]
正在瀏覽:
1 名遊客
grep 獲取 字串 |
|||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
會員一級
![]() ![]() 註冊日期:
2018/3/5 2:17 所屬群組:
已註冊使用者 等級: 1
HP : 0 / 2
![]() |
請問下列文字 要如何獲取 identifier
/dev/disk0 (internal, physical): #: TYPE NAME SIZE IDENTIFIER 0: GUID_partition_scheme *128.0 GB disk0 1: EFI EFI 209.7 MB disk0s1 2: Apple_HFS InstallMacOS 8.9 GB disk0s2 3: Apple_HFS MacOS 118.6 GB disk0s3 想用grep 取得 MacOS的 IDENTIFIER 也就是 disk0s3 試過 grep -Eo "MacOS.*(disk.*)" 還是不行, 求各位大神幫忙
2018/3/5 2:47
|
||||||||||
![]() |
回覆: grep 獲取 字串 |
|||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
會員三級
![]() ![]() 註冊日期:
2008/12/10 7:19 所屬群組:
已註冊使用者 等級: 15
HP : 0 / 369
![]() |
這個問題用 awk 吧!
cat 你的檔案.txt | awk 'NR>2 {print $NF}' # 從第三行起,每行都印出最後一欄 輸出結果: disk0 disk0s1 disk0s2 disk0s3
2018/3/5 8:48
|
||||||||||
![]() |
回覆: grep 獲取 字串 |
|||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
會員五級
![]() ![]() 註冊日期:
2012/4/22 10:50 所屬群組:
已註冊使用者 等級: 37
HP : 0 / 901
![]() |
kengi 寫到: 雪凡 寫到: ================================================================================ 假設樓主原本的那些資料存在「data.txt」裡 執行
顯示
註: 關於「grep ' MacOS '」, 在「MacOS」這個單字,左右我各加了一個「空白」, 並且加上「單引號 '」框住,這樣「空白」就不會被「shell」吃掉。 這樣的查詢條件,用「grep」抓出來,就可以區隔「InstallMacOS」那一行。 ================================================================================ 接著再搭配「awk」抓出最後一個欄位 執行
顯示
註: 下面「#7」,只有使用「awk」來處理。 ================================================================================ 以上提供參考
2018/3/5 9:33
|
||||||||||
![]() |
回覆: grep 獲取 字串 |
|||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
會員一級
![]() ![]() 註冊日期:
2018/3/5 2:17 所屬群組:
已註冊使用者 等級: 1
HP : 0 / 2
![]() |
原來要用AWK阿
可以了, 感謝~ 但我在想是否能用GREP 正規表達式的方式呢?
2018/3/5 10:29
|
||||||||||
![]() |
回覆: grep 獲取 字串 |
|||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
會員五級
![]() ![]() 註冊日期:
2012/4/22 10:50 所屬群組:
已註冊使用者 等級: 37
HP : 0 / 901
![]() |
kengi 寫到: 執行
顯示
第二次過濾,不用「awk」,使用你原本「grep -Eo」的方式。 ================================================================================ 另外管線可以多次, grep | cut | awk | sed | sort 可以一直串下去,直到過濾你想要的結果。 可以參考最近一個討論案例「#56 回覆: Ubuntu 17.10 推出」。 其他的討論案例紀錄在「[索引]如何執行指令」。 ================================================================================ 以上提供參考
2018/3/5 10:38
|
||||||||||
![]() |
回覆: grep 獲取 字串 |
|||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
會員一級
![]() ![]() 註冊日期:
2018/3/5 2:17 所屬群組:
已註冊使用者 等級: 1
HP : 0 / 2
![]() |
是我要的, 太感謝了~
2018/3/5 10:50
|
||||||||||
![]() |
回覆: grep 獲取 字串 |
|||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
會員五級
![]() ![]() 註冊日期:
2012/4/22 10:50 所屬群組:
已註冊使用者 等級: 37
HP : 0 / 901
![]() |
若是只要使用「awk」來處理,可以對照「#3」和「#5」的思路來看。
================================================================================ 執行
顯示
================================================================================ 然後若是要取出最後一個欄位,可以執行下面指令
顯示
要了解「awk」,可以查詢「awk」,可以找到一篇「參考文章」。 ================================================================================ 以上提供參考, 報告完畢 ![]()
2018/3/5 12:38
|
||||||||||
![]() |
回覆: grep 獲取 字串 |
|||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
會員三級
![]() ![]() 註冊日期:
2016/4/18 12:29 所屬群組:
已註冊使用者 等級: 9
HP : 0 / 221
![]() |
Hi 我又來借串問一下
請問如果用top觀察程式,並用grep過濾,我要如何移除不要的資訊,如CPU或MEM之外的通通不要 以init程式來說,使用 top |grep init 顯示 1 root 20 0 3120 1508 952 S 0.0 0.3 0:05.97 init 但我加上 awk {printf $NF} top |grep init | awk {printf $NF} 會顯示
我想顯示後面三個數值,如下 1 root 0.0 0.3 0:05.97 init 再麻煩各位 謝謝
2018/3/5 15:33
|
||||||||||
![]() |
回覆: grep 獲取 字串 |
|||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
會員五級
![]() ![]() 註冊日期:
2012/4/22 10:50 所屬群組:
已註冊使用者 等級: 37
HP : 0 / 901
![]() |
ubuntu_net2016 寫到: ================================================================================ 關於
後面那一段要用「單引號'」框住,並且是使用「print」,不是「printf」。
可以參考「#3」下面這一行
* https://www.gnu.org/software/gawk/manual/gawk.html#Very-Simple * https://www.gnu.org/software/gawk/manual/gawk.html#Print * https://www.gnu.org/software/gawk/manual/gawk.html#Printf ================================================================================ 回到你原本要問的,下面是參考指令,我是以「firefox」舉例
顯示
預設應該是用「空白字元」當切割,而下面則是欄位對照表 $1 ==> 表示第一個欄位 $2 ==> 表示第二個欄位 $3 ==> 表示第三個欄位 $(NF-4) ==> 表示倒數第五個欄位 $(NF-3) ==> 表示倒數第四個欄位 $(NF-2) ==> 表示倒數第三個欄位 $(NF-1) ==> 表示倒數第二個欄位 $NF ==> 表示倒數第一個欄位 而「top」也可以額外設定一些參數,再搭配「awk」。
或是先「grep」,再搭配「awk」
而從「ps」,也可以顯示想要關注的欄位 執行
或是執行
或是執行
顯示
執行
顯示 PID USER %CPU %MEM TIME COMMAND 1507 user 10.2 7.2 88:09 firefox ================================================================================ 上面的範例,「awk」是用「print」,下面則是使用「printf」來當範例。
顯示
而「top」也可以額外設定一些參數,再搭配「awk」。
或是先「grep」,再搭配「awk」
================================================================================ 接下來討論如何設定切割依據。 假設「data.txt」的內容如下
可以執行下面指令
關於「-F ':'」,表示依據「:」來切割。 關於「'{print $2}'」,表示只有印出第二個欄位。 所以上面的指令,會顯示如下
================================================================================ 假設「data.txt」的內容如下
可以執行下面指令
關於「-F '=='」,表示依據「==」來切割。 關於「'{print $2}'」,表示只有印出第二個欄位。 所以上面的指令,會顯示如下
================================================================================ 假設「data.txt」的內容如下
可以執行下面指令
這裡就不透過「-F ':'」,改用「BEGIN {FS=":"}」,表示依據「:」來切割。 關於「'{print $2}'」,表示只有印出第二個欄位。 所以上面的指令,會顯示如下
================================================================================ 假設「data.txt」的內容如下
可以執行下面指令
這裡就不透過「-F ':'」,也不透過「BEGIN {FS=":"}」, 是透過「-v FS=':'」表示依據「:」來切割。 關於「'{print $2}'」,表示只有印出第二個欄位。 所以上面的指令,會顯示如下
================================================================================ 假設「data.txt」的內容如下
也可以改用「cut」來切割,以執行下面指令
關於「-d ':'」,表示依據「:」來切割。 關於「-f 2」,表示印出第二個欄位。 所以上面的指令,會顯示如下
註:在「cut」的「-d ':'」只能一個字元,所以不能接「-d '=='」。 ================================================================================ $ man awk $ man cut * https://www.gnu.org/software/gawk/manual/ * https://www.gnu.org/software/gawk/manual/html_node/Very-Simple.html#Very-Simple * https://www.gnu.org/software/gawk/manual/html_node/Print.html#Print * https://www.gnu.org/software/gawk/manual/html_node/Printf.html#Printf * https://www.gnu.org/software/gawk/manual/html_node/Options.html#Options * https://www.gnu.org/software/gawk/manual/html_node/Field-Separators.html#Field-Separators * https://www.gnu.org/software/gawk/manual/html_node/User_002dmodified.html#User_002dmodified ================================================================================ 例外可以從寫程式的角度來看這些概念,概念是相通的 以「php」為例 假設「data.txt」的內容如下
下面的是「test.php」的內容 #!/usr/bin/env php <?php $data = file('data.txt'); foreach ($data as $num => $line) { $line = trim($line); $cols = explode(':', $line); printf("%s\n", $cols[1]); } 執行
然後執行
顯示
================================================================================ 下面的則是「test2.php」的內容 #!/usr/bin/env php <?php $contents = file_get_contents('data.txt'); $data = explode("\n", $contents); foreach ($data as $num => $line) { $line = trim($line); $cols = explode(':', $line); if (!array_key_exists(1, $cols)) { continue; } printf("%s\n", $cols[1]); } ================================================================================ 之前有簡單寫了一些範例放在「GitHub」上。 ================================================================================ * http://php.net/manual/en/function.file.php * http://php.net/manual/en/function.file-get-contents.php * http://php.net/manual/en/function.explode.php * http://php.net/manual/en/function.printf.php * http://php.net/manual/en/function.trim.php * http://php.net/manual/en/language.types.array.php * http://php.net/manual/en/control-structures.foreach.php * http://php.net/manual/en/control-structures.continue.php * http://php.net/manual/en/function.array-key-exists.php ================================================================================ 以上提供參考 報告完畢 ![]()
2018/3/5 16:20
|
||||||||||
![]() |
回覆: grep 獲取 字串 |
|||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
會員五級
![]() ![]() 註冊日期:
2012/4/22 10:50 所屬群組:
已註冊使用者 等級: 37
HP : 0 / 901
![]() |
ubuntu_net2016 寫到: 除了上面「#9」回覆您的。 剛研究一下「top」怎麼使用? 因為其實我很少用它,所以以前也沒去深究它怎麼使用 :p 剛查到一篇「參考文章」。 先執行
然後按下「f」,就可以選擇要顯示的欄位,目前有顯示的欄位,前面會有「*」 然後可以用「上下鍵」來移動,在要選擇的欄位,按下「空白鍵」切換。 設定好後,按下「q」離開設定,就會看到顯示的欄位有所增減。 額外紀錄剛找到的另一篇「參考文章」。 ================================================================================ 另外印象中,以前常看到網路上推薦另一個工具「htop」。 執行下面指令,安裝「htop」這個「Package」。
然後執行
畫面最下方就有快速鍵的按鈕,可以參考。 按下「F1」或「h」,觀看「Help」。 按下「F2」或「S」,做設定。<-- 注意「S」是大寫。 然後在第一個欄位「Setup」,按「上下鍵」,移動到「Columns」, 接著按下「Tab鍵」或是「右鍵」,會移動到第二個欄位「Active Columns」, 一樣可以按「上下鍵」移動,然後按下「F9」,就會刪除該欄位,這樣就不會顯示該欄位了, 然後按下「Esc」或是「F10」離開設定畫面。 有滑鼠支援,也可以使用滑鼠操作。 設定完,應該會紀錄在「~/.config/htop/htoprc」這個檔案, 若要恢復原狀,只要刪除「~/.config/htop/htoprc」這個檔案就可以了
然後再執行「htop」 ================================================================================ ## 類似圖形界面工具 (GUI) * qps <-- 我在「Ubuntu 17.10」裝「lxqt」,會一併裝「qps」。 * gnome-system-monitor * xfce4-taskmanager * ksysguard 想到之前看到的一篇「文章」,還沒去深究,剛好順手紀錄一下連結。 ================================================================================ 以上提供參考 ![]()
2018/3/5 20:23
|
||||||||||
![]() |
您可以查看帖子.
您不可發帖.
您不可回覆.
您不可編輯自己的帖子.
您不可刪除自己的帖子.
您不可發起投票調查.
您不可在投票調查中投票.
您不可上傳附件.
您不可不經審核直接發帖.