匹配以特定字母开头并排除某些字词的行

时间:2013-10-24 19:11:19

标签: linux bash shell scripting grep

我有一个包含以下一系列行的文件:

dbxxx
dbxxxx
dbxx
tdxx
tdxxx
sbxx
sbxxxxx
dbxx_migrated
tdxxx_old

其中x =一位数。

我需要创建一个输出,确保显示以下列开头的行:db,td和sb,并排除任何具有_migrated和_old的行。

这可以用grep吗?

2 个答案:

答案 0 :(得分:2)

您可以将正则表达式和逻辑运算符与awk结合使用:

$ awk '/^(db)|(td)|(sb)/ && !/_(old)|(migrated)/' file
dbxxx
dbxxxx
dbxx
tdxx
tdxxx
sbxx
sbxxxxx

答案 1 :(得分:0)

grep -E '^(db|td|sb)' file | grep -Ev '_(migrated|old)$'

perl -lne 'print if /^(db|td|sb)/ and not /_(migrated|old)$/' file