是否有一个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行。
答案 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
%