从列切到行尾

Kyl*_*ley 11 unix bash

我有一个问题是从egrep削减输出.我的输出如下:

From: First Last
From: First Last
From: First Last
Run Code Online (Sandbox Code Playgroud)

我想删掉"From:"(基本上是留下"First Last").

我试过了

cut -d ":" -f 7
Run Code Online (Sandbox Code Playgroud)

但输出只是一堆空行.

我将不胜感激任何帮助.

这是我试图使用的完整代码,如果它有帮助:

egrep '^From:' $file | cut -d ":" -f 7
Run Code Online (Sandbox Code Playgroud)

注意:我已经测试了代码的egrep部分,它按预期工作.

Aar*_*ler 11

cut您的问题中的命令行指定冒号分隔的字段,并且您希望输出仅包含字段7; 由于您的输入中没有第7个字段,因此您得到的结果不是您想要的.

由于"From:"前缀在所有行中看起来都是相同的,因此您可以简单地从第7个字符开始:

egrep '^From:' $file | cut -c7-
Run Code Online (Sandbox Code Playgroud)

并得到你想要的结果.


小智 11

你们真的很亲密。

我认为你只需要将“:”替换为“”作为分隔符,并在“7”后面添加“-”:如下所示:

cut -d " " -f 2-
Run Code Online (Sandbox Code Playgroud)

我测试过并且工作得很好。

  • 这应该是可接受的答案,因为 7 是硬编码值。这个答案说“无论第一个空格在哪里,只需删除它之前的所有内容” (2认同)

gri*_*rim 6

-f参数是哪些领域.由于:该行中只有一个,因此只有两个字段.所以,改变-f 7-f 2-会给你想要你想要的.虽然有领先的空间.


Alo*_*k-- 5

您可以将egrepcut部分组合成一个命令sed:

sed -n 's/^From: //gp' $file
Run Code Online (Sandbox Code Playgroud)

sed -n默认情况下关闭打印,然后我psed命令中明确使用打印我想要的行.

  • 如果使用行锚的开头,则不需要`/ g`标志.永远不会匹配多次. (4认同)
  • @devnull 但在这种情况下它也会打印不匹配的行。 (2认同)