我想知道如何用sed做以下事情: 我只需要保留每行中的前三个单词。 例如,以下文字:
the quick brown fox jumps over the lazy bear
the blue lion is hungry
将转换为:
the quick brown
the blue lion
答案 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