从列切到行尾

时间:2013-10-17 21:01:07

标签: bash unix

我在从egrep切断输出时遇到了一些问题。我的输出如下:

From: First Last
From: First Last
From: First Last

我想剪掉“From:”(基本上是“最后一个”)。

我试过

cut -d ":" -f 7

但输出只是一堆空行。

我将不胜感激。

以下是我尝试使用的完整代码,如果有帮助的话:

egrep '^From:' $file | cut -d ":" -f 7

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

5 个答案:

答案 0 :(得分:10)

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

由于“From:”前缀在所有行中显示相同,因此您可以简单地从第7个字符开始:

egrep '^From:' $file | cut -c7-

并获得您想要的结果。

答案 1 :(得分:6)

-f参数用于哪些字段。由于该行中只有一个:,因此只有两个字段。因此,将-f 7更改为-f 2-会让您想要。虽然有领先的空间。

答案 2 :(得分:5)

您可以将egrepcut部分合并到sed的一个命令中:

sed -n 's/^From: //gp' $file

sed -n默认关闭打印,然后我明确地在p命令中使用sed来打印我想要的行。

答案 3 :(得分:3)

您可以使用sed:

sed 's/^From: *//'

或者awk:

awk -F ': *' '$1=="From"{print $2}'

grep -oP

grep -oP '^From: *\K.*'

答案 4 :(得分:0)

cut 本身是bash中非常方便的工具

  

cut -d(分隔符)-f(您想要作为输出的字段)

单个字段直接给出为-f 3, 字段范围可以选择为-f 5-9

所以在你的特殊情况下,代码将是

  

egrep' ^来自:' $ file |切-d \ -f 2-3

分隔符是此处的空格,可以使用 \

进行转义

-f 1对应于"来自"和2-3对应于"最后一个"