2017-09-13 57 views
0

对于某些开发工作,我需要从一系列存储在文件夹中的日志文件中删除一些“噪音”。 (我有这个在Linux上,也可以做到这一点,进入Windows。)我想删除应该是这样的A线:从日志文件中删除行并更新现有文件而不用行

Sep 5/2017 23:59:50:324 [MISC ]: ValueType:ST/SetId:/ObID:0002-d007^RhySta^MDIL/ObSubID:0/Detail:Sinus Rhythm/Units:/AccessChecks:/ObxTimeStamp: 

每当我看到[MISC ]:我想删除整条生产线,并留下任何的它的地方。只要从文件中删除行,我想移动以用现有名称保存文件,然后移动到文件夹中的下一个文件。

我不是一个scripter ..因此请求协助。

+0

使用'for' +'sed' +'mv'。祝你好运 – RomanPerekhrest

+0

我明白你不是一个scripter,但这基本上是一个请求别人为你写代码。你将不得不自己尝试一下。如果您编写脚本并对如何完成脚本有疑问,那就是我们可以提供帮助的地方。 –

+0

忽略有关处理多个文件的部分。编写一个脚本,用一个文件做你想做的事,然后用'find'或者一个循环来调用每个文件上的脚本。小心无意中循环你正在创建的文件。最简单的解决方案(可能)是在不同的目录中创建新的输出文件,然后在完成后删除原始文件。 –

回答

0

这是一个使用for, find, sed and mv.来做到这一点。

样品目录:

[zee]$ find . 
./test2/file1.tx 
./test2 

一行代码:

[zee]$ for file in $(find test1/ -type f) ; do echo "checking if file $file has a match" ; grep -q "MIS" $x ; if [ $? -eq 0 ]; then echo "$file has a match" ; sed -i '/MIS/d' $file && echo "deleted matches...moving $file" && mv $file test2/ ; fi ; done 

运行上面一行代码的输出:

checking if file test1/file1.tx has a match 
test1/file1.tx has a match 
deleted matches...moving test1/file1.tx 

这里是做什么的:找到的所有文件在目录“test1”中,检查给定文件是否匹配。如果文件匹配,它将删除匹配并将文件移动到目录“test2”。