匹配+选项卡后的grep单词

时间:2017-03-01 20:09:51

标签: linux bash

我是编码/ linux的新手 我想找到包含/file/4eb335ac-dc6b-4fd9-a6e1-1ca83d931b77XX Number 1.2.3.4

的行

最初,我只是通过

进行硬编码
XX Number      1.2.-.-

然后我意识到有一些文件有#34; XX Number"在他们的行中会搞砸。

以下是一个示例(请注意,多个空格是文字标签):

grep "XX Number" filename | cut -c 15-

这是我目前得到的:

XX Number       1.2.3.4
XX Number       1.2.-.-
Another line with XX Number that shouldn't match

这就是我想要的:

$ grep "XX Number" filename | cut -c 15-
1.2.3.4
1.2.-.-
ith XX Number that shouldn't match

如何grep for XX Number +标签然后只显示1.2.3.4或1.2。-.-?

由于

3 个答案:

答案 0 :(得分:0)

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
-.-

答案 1 :(得分:0)

使用包含标签的grep

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

输出:

3.4
-.-

或者,如果你想要整个领域:

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

输出:

1.2.3.4
1.2.-.-

Tab是cut的默认分隔符。

答案 2 :(得分:0)

您只想打印替换成功的行,因此默认情况下不打印(-n)并在替换后打印(.../p)。

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

或当你做坚果想要在TAB之后删除4个字符时:

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