在unix中计算单词并从文本文件中删除字符串

时间:2011-04-15 15:43:12

标签: file shell unix string

我有一个问题:我有一个大日志文件,我想清理它。我只对包含确定单词的字符串感兴趣,我想删除其他字符串。即:

access ok from place1
access ko from place1
access ok from place2
access ko from place2
access ok from place3
access ko from place3
......

我想只获得'place2'条目:

access ok from place2
access ko from place2

我该怎么办? 提前谢谢!

6 个答案:

答案 0 :(得分:4)

grep“place2”/ path / to / log / file> cleanedFile.txt

我写了blog post about combining find/sed/grep - 你可能会感兴趣。

答案 1 :(得分:2)

试试这个grep命令:

grep "\<place2\>" log-file > out-file

\<\>会确保匹配完整的字,因此inplace2将不会匹配。

答案 2 :(得分:1)

grep "\<place2\>" file.log > file.out
wc file.out 

用于计算单词的wc(字数)。但对于2个问题,通常应该打开两个问题。 :)

答案 3 :(得分:0)

另一个选择,选择第4列等于“place2”的行

awk '$4 == "place2"' file

答案 4 :(得分:0)

与大多数其他答案不同,它会就地修改文件,不需要进一步重命名。

sed -i -n '/place2/p' /var/log/file

这假设GNU sed。如果你没有GNU sed但是有perl:

perl -i -ne '/place2/ && print' /var/log/file

答案 5 :(得分:0)

这两个例子也进行了就地编辑。

$ awk '$NF=="place2"{print $0>FILENAME}' file

$ ruby -i.bak -ane 'print if $F[-1]=="place2"' file

还有其他方法来记录这些行

sed -i.bak -n '/place2$/p' file

grep 'place2$' file > temp && mv temp file

纯粹使用shell

while read -r line; do case $line in  *place2) echo "$line";; esac; done < file > temp && mv temp file