头和grep同时

时间:2013-11-12 18:03:50

标签: bash unix grep unix-head

是否有一个unix one liner来做这个?

head -n 3 test.txt > out_dir/test.head.txt
grep hello test.txt > out_dir/test.tmp.txt
cat out_dir/test.head.txt out_dir/test.tmp.txt > out_dir/test.hello.txt
rm out_dir/test.head.txt out_dir/test.tmp.txt

即,我想同时从给定文件中获取标题和一些grep行。

5 个答案:

答案 0 :(得分:8)

你可以说:

{ head -n 3 test.txt ; grep hello test.txt ; } > out_dir/test.hello.txt

答案 1 :(得分:8)

使用awk:

awk 'NR<=3 || /hello/' test.txt > out_dir/test.hello.txt

答案 2 :(得分:3)

尝试使用sed

sed -n '1,3p; /hello/p' test.txt > out_dir/test.hello.txt

答案 3 :(得分:3)

awk解决方案是最好的,但我会为完整性添加一个sed解决方案:

$ sed -n test.txt -e '1,3p' -e '4,$s/hello/hello/p' test.txt > $output_file

除非另有说明,否则-n表示不打印一行。 -e是命令'1,3p打印前三行4,$s/hello/hello/p查找包含单词hello的所有行,并替换hello。最后p打印出替换操作的所有行。

应该有一种使用4,$g/HELLO/p的方法,但我无法使用它。我真的和sed搞混了很久了。

答案 4 :(得分:2)

当然,我会去awk,但这里有一个ed解决前vi怀旧词:

ed test.txt <<%
4,$ v/hello/d
w test.hello.txt
%