我有一个清单:
/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
答案 0 :(得分: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
将为{{1}}。这是你期望的吗?
答案 1 :(得分:1)
我不太清楚如何使用grep达到你的目的。可能你想要Perl:
perl -lne 'if(/Field[\d]+/ or /NRepeatLeft/){print}' your_file
答案 2 :(得分:-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
您可以使用示例here查看其工作原理。