0

如何从此输出中仅提取字符串q9I9YP1V013809 :

q9I9YP1V013809     1472 Thu Oct 18 11:34  test@test.com 
                                          test1@test.com 
                                          test2@test.com 
                                          test3@test.com

预期视图:

q9I9YP1V013809
4

5 回答 5

2

One of many ways. If first field doesn't contain an @, print it.

awk '$1 !~ /@/ { print $1; }' infile
于 2012-10-18T10:56:04.060 回答
2

You can check presence of @ character or base it on # of fields present as in this command:

awk 'NF > 5 { print $1 }' input.file
于 2012-10-18T11:04:17.023 回答
2

我会做:

awk 'NF>1{print $1}' file

因为OP没有提到预期字符串的任何规则。它也可以有'@'。

测试:

kent$  echo "q9I9YP1V013809     1472 Thu Oct 18 11:34  test@test.com 
                                          test1@test.com 
                                          test2@test.com 
                                          test3@test.com"|awk 'NF>1{print $1}'
q9I9YP1V013809
于 2012-10-18T11:05:48.960 回答
0

如果它始终是第一个单词,并且其他行以空格为前缀,则使用:

<infile grep -Eo '^[^[:blank:]]+'
于 2012-10-18T14:13:34.623 回答
0

要跳过所有以空格开头的行,并删除剩余文件的空格后的所有内容,请执行

grep -v '^ ' file.in | sed "s/ .*//"

相比awk,你需要启动两个进程,但是做的事情要清楚得多。

另一种解决方案,sed仅:

sed "/^ /d;s/ .*//" file.in

不是很清楚,但只有一个过程。第一个sed命令 ( /^ /d) 删除所有以空格开头的行;第二个命令与上面相同。

于 2012-10-18T10:57:33.207 回答