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

use*_*284 4 bash

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

use
user_99
12345
Run Code Online (Sandbox Code Playgroud)

+10k 行...

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

有任何想法吗?:)

我还想删除开头超过 3 个数字的行。

ste*_*ver 5

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

sed -r '/.{4,}/!d' file
Run Code Online (Sandbox Code Playgroud)

同样,以超过 3 个连续数字开头的行将^[0-9]{4,}删除所有这些

sed -r '/^[0-9]{4,}/d' file
Run Code Online (Sandbox Code Playgroud)

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

sed -r -e '/.{4,}/!d' -e '/^[0-9]{4,}/d' file
Run Code Online (Sandbox Code Playgroud)

或者

sed -r '/.{4,}/!d ; /^[0-9]{4,}/d' file
Run Code Online (Sandbox Code Playgroud)

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