我有一个日志文件,我想删除我的日志文件中的所有com.test.data文本。在下面的示例中,我希望所有出现的粗体都被条带化。
我想要的文本之后的新行会造成严重破坏,删除所有\ n会破坏整个.log文件。
我尝试了grep -e 'com.test.data' debug.log --color -v > test.log
。
还尝试sed 's/com.test.data -\(.*\)2016-01/\1/' debug.log > test.log
。
还尝试sed '/'com.test.data -'/,/2016-01/ s/[a-z]*// p' debug.log > test.log
一切似乎都失败了。
我的计划是找到'com.test.data - '和'2016-01'之间的所有文字,将所有这些替换为'empty'(全部删除)。 然后拿我的文件并使用grep给我除'com.test.data - '之外的所有行。 首先这样做似乎让我更接近。
INPUT
2016-01-05 14:45:05,264 com.test.data - blah blah blahsd
afdadfasdfsd
sdsdfsdffssfddsf
dfsdsfdfsdfdsdfs
fsdsdfdfs
2016-01-05 14:46:05,264 com.test.rest - Testing 123
2016-01-05 14:47:05,264 com.test.data - blah blah blahsd
afdadfasdfsd
sdsdfsdffssfddsf
dfsdsfdfsdfdsdfs
fsdsdfdfs
2016-01-05 14:46:05,264 com.test.rest - Testing 123
或使用
sed 's/^2016-01/@/' debug.log > test.log //Add @ to beginning of file
现在它只是从com.test.data --->中找到文本。 @
让输入变得更轻松的新输入
@-05 14:45:05,264 com.test.data - blah blah blahsd
afdadfasdfsd
sdsdfsdffssfddsf
dfsdsfdfsdfdsdfs
fsdsdfdfs
@-05 14:46:05,264 com.test.rest - Testing 123
@-05 14:47:05,264 com.test.data - blah blah blahsd
afdadfasdfsd
sdsdfsdffssfddsf
dfsdsfdfsdfdsdfs
fsdsdfdfs
@-05 14:46:05,264 com.test.rest - Testing 123
输出
2016-01-05 14:46:05,264 com.test.rest - Testing 123
2016-01-05 14:46:05,264 com.test.rest - Testing 123
有什么想法吗?
答案 0 :(得分:1)
您可以尝试这样的事情:
sed -r -n '/^[0-9:, -]{24}com\.test\.data /{:a;n;/^[0-9:, -]{24}/!ba;/ com\.test\.data /ba;};p;' file
在某些unix系统中,选项-r
不存在,并被-E
替换(使用扩展正则表达式语法)
答案 1 :(得分:1)
此脚本循环输入并记住以日期开头的最后一行是否包含com.test.data
。如果没有,则会打印该行。
#!/bin/bash
re='^[[:digit:]]{4}-[[:digit:]]{2}-[[:digit:]]{2}'
printflag=1
while IFS= read -r line || [[ -n $line]]; do
if [[ $line =~ $re ]]; then
if [[ $line =~ com\.test.\data ]]; then
printflag=0
else
printflag=1
fi
fi
if (( printflag )); then
echo "$line"
fi
done < "$1"
这将日志文件的名称作为参数。存储为script
时,请使用
./script debug.log
答案 2 :(得分:1)
如果以下脚本没有完全符合您的要求,则应该很容易使其适应您的要求。它还具有便携性,高效性和可维护性:
awk '
BEGIN {ok=1}
/^ *@-/ { if ($3 == "com.test.data") {ok=0; next} else {ok=1} }
ok {print}'
答案 3 :(得分:0)
使用测试123打印行
awk '/Testing 123/' file
2016-01-05 14:46:05,264 com.test.rest - Testing 123
2016-01-05 14:46:05,264 com.test.rest - Testing 123