我是bash的新手,並且很難搞清楚這一點。SED:如何在一個給定的文件中使用sed只能找到偶數
使用sed
,任何人都可以幫助我找到給定的文件中只有偶數?
我想出如何找到[0,2,4,6,8]使用此開始的所有數字:
sed -n 's/^[0-9]*[02468] /&/w even' <file
但是,這並不能保證數量是偶數肯定的。
我很難找到匹配的數字是否以[0,2,4,6,8]結尾,因爲它是可以肯定的。
那麼,任何人都可以幫助我嗎?
我是bash的新手,並且很難搞清楚這一點。SED:如何在一個給定的文件中使用sed只能找到偶數
使用sed
,任何人都可以幫助我找到給定的文件中只有偶數?
我想出如何找到[0,2,4,6,8]使用此開始的所有數字:
sed -n 's/^[0-9]*[02468] /&/w even' <file
但是,這並不能保證數量是偶數肯定的。
我很難找到匹配的數字是否以[0,2,4,6,8]結尾,因爲它是可以肯定的。
那麼,任何人都可以幫助我嗎?
你的正則表達式看起來有點怪異,我不知道你想做的事,但這應該幫助:
sed -r -n 's/^[0-9]*?[02468] /even/g'
-r
啓用擴展正則表達式,*?
使它非貪婪,和/g
到爲文件中的所有行全局執行替換。
爲什麼你找不到以[0248]結尾的數字?
你的命令應該正常工作假設有一個空格後都爲偶數時,他們都在行的開頭:
$ echo 'foo
1231
2220
1254 ' | sed -n '/[0-9]*[02468] /p'
2220
1254
還要注意的是,因爲你實際上並不做替代,您不需要s
命令。使用地址(模式)說明符和w
命令(就像我上面用p
命令所做的那樣)。
爲了確保即使數字是最後一個,但不一定後跟一個空格,你可以這樣做
$ echo 'foo
1231
2220
1254 ' | sed -n '/[0-9]*[02468]\($\|[^0-9]\)/p'
2220
1254
其實,你的情況看起來更像是一個用例grep
,不sed
,因爲你做了過濾而不是編輯。一切都變得與GNU grep
更容易,因爲你可以做
$ echo 'foo
1231
2220
1254 ' | grep -P '\d*[02468](?!\d)'
2220
1254
只是追加> even
的命令,使其寫入文件even
。
$ cat file
1
2
3
498
57
12345678
$ awk '$0%2' file
1
3
57
$ awk '!($0%2)' file
2
498
12345678
首先我想你可能會把'perl'和'sed'混淆,據我所知'sed'沒有這樣的''非貪婪'的操作符。其次,如果您調用了'-n',則不會打印任何內容,因爲替代命令中不存在'p'標誌。最後,目前還不清楚,但我相信@ user445687希望將那些以偶數或數字本身開頭的行寫入名爲'even'的文件。 – potong