我需要從此檔案中提取以 10-20 范圍內的數字開頭的行,并且我嘗試使用 grep "[10-20]" tmp_file.txt,但來自具有這種格式的檔案
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.aa
12.bbb
13.cccc
14.ddddd
15.eeeeee
16.fffffff
17.gggggggg
18.hhhhhhhhh
19.iiiiiiiiii
20.jjjjjjjjjjj
21.
它回傳所有內容并標記每個包含 1、0、10、2、0、20 或 21 的數字:/
uj5u.com熱心網友回復:
使用擴展正則運算式 ( -E):
grep -E '^(1[0-9]|20)\.' file
輸出:
10.aa 12.bbb 13.cccc 14.dddd 15.eeeeee 16.ffffff 17.gggggggg 18.hhhhhhhhh 19.iiiiiiiii 20.jjjjjjjjjjj
請參閱:堆疊溢位正則運算式常見問題解答
uj5u.com熱心網友回復:
假設檔案可能未排序并使用數字比較
awk -F. '$1 >= 10 && $1 <= 20' < file.txt
uj5u.com熱心網友回復:
另一個帶 awk 的
awk '/^10\./,/^20\./' tmp_file.txt
awk '/^10\./,/^13\./' tmp_file.txt
10.aa
12.bbb
13.cccc
uj5u.com熱心網友回復:
使用grep
$ for i in {10..20}; do grep "^$i\." input_file; done
10.aa
12.bbb
13.cccc
14.ddddd
15.eeeeee
16.fffffff
17.gggggggg
18.hhhhhhhhh
19.iiiiiiiiii
20.jjjjjjjjjjj
uj5u.com熱心網友回復:
嘗試
grep -w -e '^1[[:digit:]]' -e '^20' tmp_file.txt
-w強制匹配整個單詞。這可以防止匹配行,如100.... 它不是 POSIX,但現在grep大多數人會遇到的每一個都支持它。grep -e '^1[[:digit:]]\.' -e '^20\.' ...如果您擔心便攜性,請使用。- 該
-e選項可以多次使用以指定多個模式。 [[:digit:]]可能比[0-9]. 請參閱在 grep 命令中,我可以將 [:digit:] 更改為 [0-9] 嗎?.
uj5u.com熱心網友回復:
grep 不是用于此目的的工具,因為 grep 查找文本模式,但不理解數值。制作匹配 10-20 的 11 個值的圖案就像用螺絲刀攪拌一罐油漆。你可以做到,但它不是適合這項作業的工具。
一個更清晰的方法是使用 Perl:
$ perl -n -e'print if /^(\d )/ && $1 >= 10 && $1 <= 20' foo.txt
這表示如果行的開頭^匹配一個或多個數字\d 并且匹配的數值$1介于 10 和 20 之間,則列印檔案的一行。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/432354.html
上一篇:RailsERB驗證
