我有一个大致如下的文件:
[25]:0.00843832,469:0.0109533):0.00657864,((((872:0.00120503,((980:0.0001
[29]:((962:0.000580339,930:0.000580339):0.00543993 ((758:0.000598847,726:0.000598847)
position:
sites: 5 4 2 1 3 4 543 5 67 657 78 67 8 5645 6
01010010101010101010101010101011111100011
1111010010010101010101010111101000100000
00000000000000011001100101010010101011111
现在我想从文件中提取以 [numeric]: 开头的行。不一定是前两行,也可能是前 7 行或前 8 行或其他行。我该如何读取此文件并输出仅包含以 [numeric]: 开头的行的文件?
答案1
使用grep
:
$ grep "^\[[0-9]\+\]:" file.txt
[25]:0.00843832,469:0.0109533):0.00657864,((((872:0.00120503,((980:0.0001
[29]:((962:0.000580339,930:0.000580339):0.00543993 ((758:0.000598847,726:0.000598847)
要将输出保存在文件中 ( output.txt
):
grep "^\[[0-9]\+\]:" file.txt > output.txt
使用python
:
#!/usr/bin/env python2
import re
with open('/path/to/file.txt') as f:
print '\n'.join([line.rstrip() for line in f if re.search(r'^\[\d+\]:', line)])
答案2
道路perl
:
perl -ne 'print "$1\n" if /^(\[[0-9]*\]:.*)/' testdata > out
道路awk
:
awk 'match($0, /^\[[0-9]*\]:/)' testdata > out
两个命令的输出
[25]:0.00843832,469:0.0109533):0.00657864,((((872:0.00120503,((980:0.0001
[29]:((962:0.000580339,930:0.000580339):0.00543993 ((758:0.000598847,726:0.000598847)
答案3
此任务非常适合grep
,因为您只是检查哪些行包含模式匹配并打印匹配的行。
heemayl 的方式非常棒。这是另一个类似的,但使用Perl 正则表达式语法(GNU grep 支持,使用-P
),以获得更短且稍微简单的模式:
grep -P '\[\d+\]:' infile
这只是打印输出,但你可以将其重定向到outfile
:
grep -P '\[\d+\]:' infile > outfile
在 Perl 正则表达式中,\d
匹配任意单个数字,与[0-9]
或相同[[:digit:]]
。
如果你感兴趣的话,这里有一个sed
方式:
sed -nr '/^\[[0-9]+\]:/p' infile
sed -nr '/^\[[0-9]+\]:/p' infile > outfile
检查每一行是否匹配^\[[0-9]+\]:
。如果匹配,则p
使用 sed 命令打印该行。该-n
标志可防止打印任何行,除非脚本明确规定sed
。
答案4
[non-numeric]
如果文件行开头不可能有,那么只需这样grep -E '^\['
做即可,即:
$ cat /tmp/tmp.tmp
[25]:0.00843832,469:0.0109533):0.00657864,((((872:0.00120503,((980:0.0001
[29]:((962:0.000580339,930:0.000580339):0.00543993 ((758:0.000598847,726:0.000598847)
position:
sites: 5 4 2 1 3 4 543 5 67 657 78 67 8 5645 6
01010010101010101010101010101011111100011
1111010010010101010101010111101000100000
00000000000000011001100101010010101011111
$ grep -E '^\[' /tmp/tmp.tmp
[25]:0.00843832,469:0.0109533):0.00657864,((((872:0.00120503,((980:0.0001
[29]:((962:0.000580339,930:0.000580339):0.00543993 ((758:0.000598847,726:0.000598847)
$