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単に文字列の最後に含まれるようにするにはどうすればよいですか(私の例では、最後の3つの文字列になります)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

スイッチがない場合( EREExtented Regex Expression-Eの略):

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 に答える