sed / awk / grep 查找分号之间的字符串

sed / awk / grep 查找分号之间的字符串

我有一个巨大的文本文件,其中包含类似的内容:

igflex01; igflexdev01; igdbstg01;
igldapint01; igjetdev01; igsql01;
igesxstg01; igdbint01; igdmstg01;
igdsdev01; igdmmmo01; igmsgint02;

等等...

当字符串“int”存在时,我想提取分号之间的所有文本。有没有办法做到这一点?

答案1

由于您要求 sed / grep,所以它是:

> cat file
igflex01; igflexdev01; igdbstg01;
igldapint01; igjetdev01; igsql01;
igesxstg01; igdbint01; igdmstg01;
igdsdev01; igdmmmo01; igmsgint02;

> sed -nr 's/\s*;\s*/\n/gp' file | grep int
igldapint01
igdbint01
igmsgint02

或者仅通过一次 sed 调用即可获得它......

> sed -nr -e 's/\s*;\s*/\n/g;/int/P' file
igldapint01
igdbint01
igmsgint02

答案2

使用“tr”命令将分号替换为换行符,然后运行 ​​grep (面向行)。

$ cat input.txt | tr ';' '\n' | grep int
 igldapint01
 igdbint01
 igmsgint02

答案3

一种方法是作弊并将其转换;为换行符,然后你可以只 grep 例如

tr ';' '\012' | grep int

例如

$ cat x
igflex01; igflexdev01; igdbstg01;
igldapint01; igjetdev01; igsql01;
igesxstg01; igdbint01; igdmstg01;
igdsdev01; igdmmmo01; igmsgint02;

$ cat x | tr ';' '\012' | grep int
igldapint01
 igdbint01
 igmsgint02

请注意,在某些情况下它有空格,因为空格;s 之间。另请注意,一行的第一个单词(不是严格地之间;在一条线上,但在数据中位于它们之间)也被返回。

答案4

$ cat abc.txt 
igflex01; igflexdev01; igdbstg01;
igldapint01; igjetdev01; igsql01;
igesxstg01; igdbint01; igdmstg01;
igdsdev01; igdmmmo01; igmsgint02;

$ grep -o '[^;]*int[^;]*' abc.txt 
igldapint01
 igdbint01
 igmsgint02

如果不需要空格:

$ grep -o '[^ ;]*int[^ ;]*' abc.txt 
igldapint01
igdbint01
igmsgint02

相关内容