i've got this file pattern
#### data ###
#### roles ###
11 test test22
12 hash hash2
13 hash3 hash77
14 hash5 ahss
14 hash5 ahss
14 hash2 adfasf
14 hash7 asfdf
#### data ###
#### addding ###
11 test test22
12 hash hash2
13 hash3 hash77
14 hash5 ahss
14 hash5 ahss
14 hash2 adfasf
14 hash7 asfdf
我想只复制行启动wuth 14并排除所有其他行到输出文件,输出文件应该是相同的结构,比如
#### data ###
#### roles ###
14 hash5 ahss
14 hash5 ahss
14 hash2 adfasf
14 hash7 asfdf
#### data ###
#### addding ###
14 hash5 ahss
14 hash5 ahss
14 hash2 adfasf
14 hash7 asfdf
我使用grep但它不会复制文件的标题 #### data ### #### roles ###
使用while循环或
进行任何操作答案 0 :(得分:1)
grep -E -e '^(#|$|14 )' data.file
这会复制以#
开头的行,空白行以及以14
开头的行和空白行。
grep -E
相当于egrep
:
egrep -e '^(#|$|14 )' data.file
您也可以使用sed
或awk
(或Perl或Python)执行此操作,但这些操作比必要的更复杂。
答案 1 :(得分:1)
您可以使用grep -E
,因为它允许匹配替代方案:
grep -E '^#|^14 |^$' infile > outfile
答案 2 :(得分:0)
在bash脚本中,将数据保存在data.txt中并调用脚本
#!/bin/bash
while read line
do
ret=0;
echo $line | grep -q "^[0-9]\+\s\+[a-zA-Z0-9]\+\s\+.[a-zA-Z0-9]\+"
ret=$?
if [ $ret -eq 0 ]; then
echo $line | grep "^14 "
else
echo $line;
fi;
done < data.txt