1

我有一个包含大量通话记录的文件,我正在尝试使用 bash 清理它。我想出了如何搜索一个字符串并删除它所在的整行,但这不是我想要完成的。

我想搜索一个字符串作为例子:

  • 文件中有大量 MAC 地址,我想将它们全部删除MAC:00-0A-DD-84-01-33
  • 在每一行的开头还有一个呼叫 ID,如下所示: 354469805或者354469894,我也想删除所有这些。

我刚开始使用bash,所以请原谅我的无知。我在下面输入两行通话记录以进行澄清。我想删除 3544 号码、MAC 地址和 Telepacific 一词。

354469725   06/24/2013  09:34   00:03:26    Chante Squires      105 TelePacific     MAC:00-0A-DD-84-01-1D   TelePacific                 17025290701 1   
354469732   06/24/2013  09:59   00:01:16    Chante Squires      105 TelePacific     MAC:00-0A-DD-84-01-1D   TelePacific                 12132238375 1   
4

2 回答 2

1

一种方式awk(您将失去额外的制表符空间,每个字段将由单个空格分隔):

awk '{for(i=2;i<NF;i++) if(8>i || i>10) printf "%s ", $i; print $NF}' log
于 2013-06-27T20:11:25.440 回答
1

你可以使用sed

sed -i 's/^[0-9]\{9\}\|MAC:[0-9A-Fa-f]\{2\}\([-\:][0-9A-Fa-f]\{2\}\)\{5\}//g' input.log

和之间是's///g'您的问题中的删除条件匹配的正则表达式。s前面的标志表示“搜索和替换”正则表达式。这//意味着什么都没有替换正则表达式。g如果它们在一行中出现多次,则末尾的标志表示“替换所有匹配项”。最后,-i开关的意思是“就地编辑文件”。

此解决方案假定您的呼叫 ID 都是 9 位数字,并且 MAC 地址有六组,每组两个十六进制数字由破折号或冒号分隔。

于 2013-06-27T18:28:23.517 回答