我生成了许多日志文件,如下所示:
Date;Time;Brand;User;Node;Location
01/01/01;666;blabla;George Armani;Springfield
我想删除字符串阿玛尼但我的命令不起作用:
cat file.log | grep identifier | cut -d ";" -f | sort | uniq | grep -o '^\S*' > newfile.log
我正在关注下一个邮政
还有另一种方法吗?
附言。同一字段中存在长度不同的字符串。
答案1
使用awk
:
awk -F\; 'OFS = ";"{ if ($4 ~ " "); split($4, fname, / /); $4=fname[1]; print }' input
这将用空格分割第四列,然后将其设置为第一个元素。
无论第四列中的内容如何,都应该有效:
$ cat input
Date;Time;Brand;User;Node;Location
01/01/01;666;blabla;George Armani;Springfield
02/02/02;777;blabla;Jesse_b;South Park
03/03/03;888;blabla;test name;somewhere
$ awk -F\; 'OFS = ";"{ if ($4 ~ " "); split($4, fname, / /); $4=fname[1]; print }' input
Date;Time;Brand;User;Node;Location
01/01/01;666;blabla;George;Springfield
02/02/02;777;blabla;Jesse_b;South Park
03/03/03;888;blabla;test;somewhere
答案2
要从文件中删除文本“Armani”,请使用以下命令:
$ sed 's/Armani//' myfile
Date;Time;Brand;User;Node;Location
01/01/01;666;blabla;George ;Springfield
$
要就地编辑它:
$ sed -i 's/Armani//' myfile
$ cat myfile
Date;Time;Brand;User;Node;Location
01/01/01;666;blabla;George ;Springfield
$
如果你想删除全部在一行中出现“Armani”时,添加一个g
,例如sed 's/Armani//g'
答案3
猫没有意义,所以可以走了。标识符不在您的示例输入中,因此我们假设您的意思是 blabla。您删除用户姓氏的请求似乎与您的示例命令完全无关,所以让我们更改它
grep blabla file.log | perl -pe 's/ [^ ;]+;/;/g' > newfile.log
如果这不能满足您的要求,您应该重写您的问题,使其清晰。