1

我有一个清单:

/device1/element1/CmdDiscovery
/device1/element1/CmdReaction
/device1/element1/Direction
/device1/element1/MS-E2E003-COM14/Field2
/device1/element1/MS-E2E003-COM14/Field3
/device1/element1/MS-E2E003-COM14/NRepeatLeft

我怎样才能grep使返回的字符串仅包含"Field" followed by digits或仅包含NRepeatLeft在字符串的末尾(在我的示例中,它将是最后三个字符串)

预期输出:

/device1/element1/MS-E2E003-COM14/Field2
/device1/element1/MS-E2E003-COM14/Field3
/device1/element1/MS-E2E003-COM14/NRepeatLeft
4

3 回答 3

2

尝试这样做:

grep -E "(Field[0-9]*|NRepeatLeft$)" file.txt
      |  |           |           ||
      |  |          OR   end_line |
      | opening_choice   closing_choice
 extented_grep

如果您没有-E开关(代表ERE : Extented Regex Expression):

grep "\(Field[0-9]*\|NRepeatLeft$\)" file.txt

输出

/device1/element1/MS-E2E003-COM14/Field2
/device1/element1/MS-E2E003-COM14/Field3
/device1/element1/MS-E2E003-COM14/NRepeatLeft

这将grep用于匹配行Field[0-9]或最后匹配RepeatLeft的行。这是你所期望的吗?

于 2012-11-20T08:34:06.053 回答
1

我不太确定如何将 grep 用于您的目的。可能您希望 perl 用于此目的:

perl -lne 'if(/Field[\d]+/ or /NRepeatLeft/){print}' your_file
于 2012-11-20T10:09:15.290 回答
-1
$ grep -E '(Field[0-9]*|NRepeatLeft)$' file.txt

输出:

/device1/element1/MS-E2E003-COM14/Field2
/device1/element1/MS-E2E003-COM14/Field3
/device1/element1/MS-E2E003-COM14/NRepeatLeft

解释:

Field       # Match the literal word
[0-9]*      # Followed by any number of digits
|           # Or
NRepeatLeft # Match the literal word
$           # Match the end of the string 

您可以在此处查看这如何与您的示例一起使用。

于 2012-11-20T08:35:52.140 回答