Sed linux上混合文件中特定于Grep的字符串

Sed linux上混合文件中特定于Grep的字符串,sed,awk,tr,Sed,Awk,Tr,如何从此输出中仅提取字符串q9I9YP1V013809: q9I9YP1V013809 1472 Thu Oct 18 11:34 test@test.com test1@test.com test2@test.com test3@

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

q9I9YP1V013809     1472 Thu Oct 18 11:34  test@test.com 
                                          test1@test.com 
                                          test2@test.com 
                                          test3@test.com
预期视图:

q9I9YP1V013809

许多方法中的一种。如果第一个字段不包含
@
,请打印它

awk '$1 !~ /@/ { print $1; }' infile

许多方法中的一种。如果第一个字段不包含
@
,请打印它

awk '$1 !~ /@/ { print $1; }' infile

要跳过所有以空格开头的行,并删除空格后面的所有内容以存放其余文件,请执行以下操作:

grep -v '^ ' file.in | sed "s/ .*//"
与awk相比,您需要启动两个流程,但要做的事情要清楚得多

另一种解决方案,仅限sed:

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

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

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

grep -v '^ ' file.in | sed "s/ .*//"
与awk相比,您需要启动两个流程,但要做的事情要清楚得多

另一种解决方案,仅限sed:

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

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

您可以检查是否存在
@
字符,或者根据此命令中出现的字段进行检查:

awk 'NF > 5 { print $1 }' input.file

您可以检查是否存在
@
字符,或根据此命令中显示的字段进行检查:

awk 'NF > 5 { print $1 }' input.file
我会:

awk 'NF>1{print $1}' file
因为OP没有提到预期字符串的任何规则。它也可能有“@”

测试:

我会:

awk 'NF>1{print $1}' file
因为OP没有提到预期字符串的任何规则。它也可能有“@”

测试:


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

<infile grep -Eo '^[^[:blank:]]+'

如果它始终是第一个单词,而其他行的前缀是空白,请使用:

<infile grep -Eo '^[^[:blank:]]+'

为什么awk不清楚?我个人认为情况正好相反,比如在
sed
grep
中,你需要记住所有的标志,而
awk
可以使用简单的通用运算符完成。是的,但当我有多个类似的条目时,我会在sed之后得到许多新行简单输出:q9I6OEFg003411 q9IBZWhC012017q9IBZRsb011962@Bernhard字体每个人都有自己的最爱。我特别不喜欢awk,尽管在学习perl之前我一直在紧张地使用它。@KalinBorisov:那么,问题出在哪里呢?我以为这就是我的意图?让我解释一下,当我有许多来自右侧的电子邮件时,您的代码会在其中留下空白,关于特定字符串上有多少邮件为什么awk不清楚?我个人认为情况正好相反,比如在
sed
grep
中,你需要记住所有的标志,而
awk
可以使用简单的通用运算符完成。是的,但当我有多个类似的条目时,我会在sed之后得到许多新行简单输出:q9I6OEFg003411 q9IBZWhC012017q9IBZRsb011962@Bernhard字体每个人都有自己的最爱。我特别不喜欢awk,尽管在学习perl之前我一直在紧张地使用它。@KalinBorisov:那么,问题出在哪里呢?我以为这就是我的意图?让我解释一下,当我有许多来自右侧的电子邮件时,您的代码会在其中的某个字符串上留下空白,其中有多少邮件位于该字符串上