sed脚本打印每行的前三个单词

时间:2011-02-14 23:05:32

标签: scripting sed

我想知道如何用sed做以下事情: 我只需要保留每行中的前三个单词。 例如,以下文字:

the quick brown fox jumps over the lazy bear
the blue lion is hungry

将转换为:

the quick brown
the blue lion

8 个答案:

答案 0 :(得分:16)

在awk中你可以说:

{print $1, $2, $3}

答案 1 :(得分:13)

您可以像这样使用cut

cut -d' ' -f1-3

答案 2 :(得分:6)

在这种情况下我建议awk

awk '{print $1,$2,$3}' ./infile

答案 3 :(得分:5)

% (echo "A B C D E F G H";echo "a b c d e f g h") | sed -E 's/([^\s].){3}//'

我把" -E"在那里为OS X兼容性。其他Unix系统可能需要也可能不需要它。

编辑:damnitall - brainfart。用这个:

% sed -E 's/(([^ ]+ ){3}).*/\1/' <<END
the quick brown fox jumps over the lazy bear
the blue lion is hungry
END

the quick brown 
the blue lion 

答案 4 :(得分:2)

只需使用shell

while read -r a b c d
do
  echo $a $b $c
done < file

红宝石(1.9)+

ruby -ane 'print "#{$F[0]} #{$F[1]} #{$F[2]}\n"' file

答案 5 :(得分:1)

如果您需要sed脚本,可以尝试:

echo "the quick brown fox jumps over the lazy bear" | sed 's/^\([a-zA-Z]\+\ [a-zA-Z]\+\ [a-zA-Z]\+\).*/\1/'

但我认为使用剪切会更容易:

echo "the quick brown fox jumps over the lazy bear" | cut -d' ' -f1,2,3

答案 6 :(得分:1)

这是一个丑陋的sed

$ echo the quick brown fox jumps over the lazy bear | sed 's|^\(\([^[:space:]]\+[[:space:]]\+\)\{2\}[^[:space:]]\+\).*|\1|'
the quick brown

答案 7 :(得分:0)

如果Perl是一个选项:

perl -lane 'print "$F[0] $F[1] $F[2]"' file

perl -lane 'print join " ", @F[0..2]' file