在 bash 中删除少于 4 个字符且多于 3 个数字的行

在 bash 中删除少于 4 个字符且多于 3 个数字的行

例如,我有这个文本文件:

use
user_99
12345

+10k 行...

我想从命令行删除那些少于 4 个字符的命令,我已经在谷歌中搜索过了,但没有结果。

有任何想法吗? : )

我还想删除开头有 3 个以上数字的行。

答案1

你可以创建一个至少有 4 个字符的 GNU sed 正则表达式作为.{4,}- 然后删除所有行除了至少有 4 个字符的:

sed -r '/.{4,}/!d' file

类似地,如果一行开头有超过 3 个连续的数字,则^[0-9]{4,}删除所有这些

sed -r '/^[0-9]{4,}/d' file

您可以使用-e或组合它们;

sed -r -e '/.{4,}/!d' -e '/^[0-9]{4,}/d' file

或者

sed -r '/.{4,}/!d ; /^[0-9]{4,}/d' file

请注意,.匹配空格字符以及非空格字符 - 如果这不是您想要的,那么您可以通过替换.字符范围或 POSIX 类(例如)来更改它[[:alnum:]]

答案2

sed 或 awk 是不错的选择:

sed -rn '/^.{0,3}$/n; /^[0-9]{3,}/n; p' file

awk --re-interval 'length > 3 && !/^[0-9]{3,}/' file

相关内容