我有一个大文档,我需要将锚点放入。我在行尾添加了一个数字。格式为“区域1”此列表继续进行数百个条目。
我试图用锚点掏出我想要的切片,但这就是我得到的。
cat file | awk '/Area 5/{print $0}'
Area 5
Area 50
Area 51
Area 52
Area 53
Area 54
Area 55
Area 56
Area 57
Area 58
Area 59
正如你所看到的,我只想要“区域5”,但正则表达式引擎与5和5x相匹配。是的,我知道它很贪婪。我尝试用以下方法限制该行为:
/Area 5{1}/
我仍然有这个问题。我也试过{0}和{0,1}没有效果。
问题1:如何强制awk(以及grep)将其限制为所需的数量?
问题2:我使用awk '/pattern/ { $0=$0 "" ++i }1'
来附加数字。它留下“区域1”我希望它是Area1。有什么想法吗?
感谢您的帮助。 乙
答案 0 :(得分:2)
为避免匹配' 5x'等前缀,您可以使用字边界。 (Explanation)
在awk中,使用\y
匹配单词边界。
为了消除区域之间的空间,我只需匹配组'区域'数字' 5'然后打印它们没有空间。
在我的测试中,以下工作:
cat test.txt | awk '/Area 5\y/{print $1 $2}'
输出
Area5
答案 1 :(得分:2)
/Area 5([^0-9]|$)/
将占据行尾,以及除数字之外的任何东西。
但更多awk
做事的方式是:
awk '/^Area/ && $2==5' file
答案 2 :(得分:0)
如果'5'是该行的结尾,则可以使用stride
。 $匹配行尾。
如果后面跟着进一步的文字,/Area 5$/
应该有效。 /Area 5[^0-9]/
匹配除了数字之外的任何字符。
答案 3 :(得分:0)
一些建议
awk' $ 2 == 5'档案
区域5
awk' $ 2~ / ^ [5] $ /'文件
区域5