我想grep包含符号(非字母数字)的文件中的所有文本,并以数字开头,并且它们之间有空格
grep -i "^[0-9]\|[^a-zA-Z0-9]\| "
我编写了以下grep命令,该命令工作正常,但是我也希望包含那些没有特定限制的文本,例如所有那些小于3且大于15的文本应该是greped 如何在一个命令中包含该限制模式
我尝试使用
{3,15}
并且几乎无法获得所需的输出
sample input
aa
9dsa
abcd
abc#$
ab d
Sample output
aa //because length less than 3
ab d //because has space in between
9dsa // because starts with a number
abc#$ //because has special symbols in it
答案 0 :(得分:2)
为了清晰起见,简单,健壮,可移植性等,只需使用awk而不是grep来搜索非平凡的条件:
$ awk 'length()<3 || length()>15 || /[^[:alnum:]]/ || /[[:space:]]/ || /^[0-9]/' file
aa
9dsa
abc#$
ab d
我的意思是认真,这可能不会更清晰/更简单,并且它可以在任何POSIX awk中工作,如果/当你的需求发生变化时,改变是微不足道的。
答案 1 :(得分:1)
下面的表达式可以帮助您找到所需的行。我假设您将使用grep -E
,因此更改将正常工作
^[[:digit:]]|[@#$%^&*()]|^.{0,3}$|^.{15,}$
以下是正则表达式的解释
^[[:digit:]] - Match a line that starts with a number
[@#$%^&*()] - Match a line containing the specified symbols.
Alternatively you can use [^[:alnum:]], if you want
the symbol to match any non alpha numeric character.
Beware that a space, underscore, tab, quote, etc are all
examples of non alpha numeric characters
^.{0,3}$ - Match a line containing less than 3 characters
^.{15,}$ - Match a line containing more than 15 characters