我在从egrep切断输出时遇到了一些问题。我的输出如下:
From: First Last
From: First Last
From: First Last
我想剪掉“From:”(基本上是“最后一个”)。
我试过
cut -d ":" -f 7
但输出只是一堆空行。
我将不胜感激。
以下是我尝试使用的完整代码,如果有帮助的话:
egrep '^From:' $file | cut -d ":" -f 7
注意:我已经测试了代码的egrep部分,它按预期工作。
答案 0 :(得分:10)
问题中的cut
命令行指定冒号分隔的字段,并且您希望输出仅包含字段7;由于您的输入中没有第7个字段,因此您获得的结果不是您想要的结果。
由于“From:”前缀在所有行中显示相同,因此您可以简单地从第7个字符开始:
egrep '^From:' $file | cut -c7-
并获得您想要的结果。
答案 1 :(得分:6)
-f
参数用于哪些字段。由于该行中只有一个:
,因此只有两个字段。因此,将-f 7
更改为-f 2-
会让您想要。虽然有领先的空间。
答案 2 :(得分:5)
您可以将egrep
和cut
部分合并到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对应于"最后一个"