使用 grep 过滤大于和小于范围的值
Filter with grep a value greater and less than range
我有一个包含以下数据的 csv:
0,M,19,finnish,english swedish german
9,M,30,urdu,english
122,F,26,finnish,english swedish german
83,M,20,finnish,english french swedish
44,F,20,finnish,english swedish
10,F,29,finnish,english
我需要一个使用 GREP 的过滤器,而不是获取大于 10 且小于 99 的用户值(第一列)。
这是我最好的动作:
cat demographic_info.csv | grep -e "1[0-9]*"
假设你想匹配从 10
到 99
的数字(即 11
到 98
包含),你可以使用
grep -E '^(1[1-9]|[2-8][0-9]|9[0-8]),' file
数字范围模式在 How to match numbers between X and Y with regexp? 处自动生成,我只需要删除 ?:
,因为 POSIX ERE 不支持非捕获组。
然而,
awk -F\, ' < 99 && > 10' file
看起来更适合这项任务。它使用逗号作为字段分隔符,并检查第一个字段值是否小于 99 且大于 10,并且只输出那些行。
看到一个 online demo:
#!/bin/bash
s='0,M,19,finnish,english swedish german
9,M,30,urdu,english
122,F,26,finnish,english swedish german
83,M,20,finnish,english french swedish
44,F,20,finnish,english swedish
10,F,29,finnish,english'
awk -F\, ' < 99 && > 10' <<< "$s"
echo "---"
grep -E '^(1[1-9]|[2-8][0-9]|9[0-8]),' <<< "$s"
输出:
83,M,20,finnish,english french swedish
44,F,20,finnish,english swedish
---
83,M,20,finnish,english french swedish
44,F,20,finnish,english swedish
我有一个包含以下数据的 csv:
0,M,19,finnish,english swedish german
9,M,30,urdu,english
122,F,26,finnish,english swedish german
83,M,20,finnish,english french swedish
44,F,20,finnish,english swedish
10,F,29,finnish,english
我需要一个使用 GREP 的过滤器,而不是获取大于 10 且小于 99 的用户值(第一列)。
这是我最好的动作:
cat demographic_info.csv | grep -e "1[0-9]*"
假设你想匹配从 10
到 99
的数字(即 11
到 98
包含),你可以使用
grep -E '^(1[1-9]|[2-8][0-9]|9[0-8]),' file
数字范围模式在 How to match numbers between X and Y with regexp? 处自动生成,我只需要删除 ?:
,因为 POSIX ERE 不支持非捕获组。
然而,
awk -F\, ' < 99 && > 10' file
看起来更适合这项任务。它使用逗号作为字段分隔符,并检查第一个字段值是否小于 99 且大于 10,并且只输出那些行。
看到一个 online demo:
#!/bin/bash
s='0,M,19,finnish,english swedish german
9,M,30,urdu,english
122,F,26,finnish,english swedish german
83,M,20,finnish,english french swedish
44,F,20,finnish,english swedish
10,F,29,finnish,english'
awk -F\, ' < 99 && > 10' <<< "$s"
echo "---"
grep -E '^(1[1-9]|[2-8][0-9]|9[0-8]),' <<< "$s"
输出:
83,M,20,finnish,english french swedish
44,F,20,finnish,english swedish
---
83,M,20,finnish,english french swedish
44,F,20,finnish,english swedish