我是bash的新手,并且很难搞清楚这一点。
使用sed
,是否有人可以帮我查找给定文件中的偶数?
我想出了如何使用这个来找到从[0,2,4,6,8]开始的所有数字:
sed -n 's/^[0-9]*[02468] /&/w even' <file
但这并不能保证这个数字是肯定的。
我很难找到匹配的号码是否以[0,2,4,6,8]结尾,因为它确实是偶然的。
任何人都可以帮我解决这个问题吗?
答案 0 :(得分:1)
你的正则表达式看起来有点奇怪,我不确定你想做什么,但这应该有所帮助:
sed -r -n 's/^[0-9]*?[02468] /even/g'
-r
启用扩展正则表达式,*?
使其变得非贪婪,/g
为文件中的所有行全局执行替换。
答案 1 :(得分:1)
假设所有偶数后面都有一个空格并且它们都在行的开头,那么你的命令应该可以正常工作:
$ 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
。
答案 2 :(得分:1)
$ cat file
1
2
3
498
57
12345678
$ awk '$0%2' file
1
3
57
$ awk '!($0%2)' file
2
498
12345678
答案 3 :(得分:0)
为什么不找到以[02468]结尾的数字?