Linux 匹配后的grep单词+;标签

Linux 匹配后的grep单词+;标签,linux,bash,Linux,Bash,我对编码/linux真的很陌生 我试图找到一行包含XX编号1.2.3.4或XX编号1.2.- 起初,我只是通过执行以下操作来硬编码 grep "XX Number" filename | cut -c 15- 但后来我意识到,有些文件的行中有“XX号”这个词,这会搞砸的 下面是一个示例(请注意,多个空格是一个文本选项卡): 以下是我目前得到的信息: $ grep "XX Number" filename | cut -c 15- 1.2.3.4 1.2.-.- ith XX Number th

我对编码/linux真的很陌生 我试图找到一行包含
XX编号1.2.3.4
XX编号1.2.-

起初,我只是通过执行以下操作来硬编码

grep "XX Number" filename | cut -c 15-
但后来我意识到,有些文件的行中有“XX号”这个词,这会搞砸的

下面是一个示例(请注意,多个空格是一个文本选项卡):

以下是我目前得到的信息:

$ grep "XX Number" filename | cut -c 15-
1.2.3.4
1.2.-.-
ith XX Number that shouldn't match
以下是我想要的:

1.2.3.4
1.2.-.-
我如何grep XX Number+选项卡,然后只显示1.2.3.4或1.2.-


感谢awk营救

$ awk '/XX Number\t1\.2\.(3\.4|-\.-)/' file

XX Number       1.2.3.4
XX Number       1.2.-.-
获取最后一个字段的部分

$ awk '/XX Number\t1\.2\.(3\.4|-\.-)/{sub("1.2.","",$NF); print $NF}' file

3.4
-.-

使用包含选项卡的
grep

grep $'XX Number\t' filename | cut -c15-
输出:

3.4
-.-
1.2.3.4
1.2.-.-
或者,如果需要整个字段:

grep $'XX Number\t' filename | cut -f2
输出:

3.4
-.-
1.2.3.4
1.2.-.-

Tab是
cut

的默认分隔符。您只希望打印替换成功的行,因此默认情况下不要打印(
-n
),也不要在替换后打印(
../p

或者,当您不想删除选项卡后的4个字符时:

sed -n 's/^XX Number\t//p' filename

请发布一些示例输入和预期输出。欢迎使用stackoverflow!我根据您的描述添加了一些示例,这样人们就可以很容易地看到您处理的数据、您得到的数据以及您想要的数据。请查看并根据需要进行编辑!谢谢你帮我组织这次活动。我编辑了我的输出和期望的输出。谢谢,这就是我要找的,在单词后面的什么地方包括标签。但是,这算硬代码吗?在比赛结束后,你是否可以在不设置范围的情况下抓取任何单词/数字?是的,你可以使用
cut-f2-
从第2栏开始抓取所有内容。我不太理解第2栏之后的内容。但是我试过了,它不能像
cut-c15-
那样使用-f2输出从第15位开始的所有字符,
cut-f2-
将输出从第二位开始的所有字段。您的示例文件只有两个由选项卡分隔的字段,因此
-f2-
不相关。这是另一个很好的方法。正则表达式让我很困惑。