删除“;”左侧数据的命令 (分号)在每一行

Bor*_*a88 0 grep sed awk text-processing regular-expression

需要在此处删除;以下每一行(分号)左侧的任何数据的命令:

07:48;1563101282.M178569P409830.de122.abteilung.com,S=1258,W=1287:2,
08:00;1563102004.M49870P436474.de122.abteilung.com,S=1258,W=1287:2,
08:16;1563102961.M195946P457876.de122.abteilung.com,S=1258,W=1287:2,
08:32;1563103921.M334168P463856.de122.abteilung.com,S=1258,W=1287:2,
08:48;1563104883.M883187P502037.de122.abteilung.com,S=1258,W=1287:2,
09:00;1563105603.M799240P519637.de122.abteilung.com,S=1258,W=1287:2,
09:16;1563106561.M419884P547969.de122.abteilung.com,S=1258,W=1287:2,
09:32;1563107524.M145768P582635.de122.abteilung.com,S=1258,W=1287:2,
09:48;1563108483.M632493P607265.de122.abteilung.com,S=1258,W=1287:2,
10:00;1563109203.M675460P633790.de122.abteilung.com,S=1258,W=1287:2,
10:16;1563110163.M299406P663234.de122.abteilung.com,S=1258,W=1287:2,
10:32;1563111121.M682713P685072.de122.abteilung.com,S=1258,W=1287:2,
Run Code Online (Sandbox Code Playgroud)

以某种方式,它会导致如下行:

1563101282.M178569P409830.de122.abteilung.com,S=1258,W=1287:2,
1563102004.M49870P436474.de122.abteilung.com,S=1258,W=1287:2,
1563102961.M195946P457876.de122.abteilung.com,S=1258,W=1287:2,
1563103921.M334168P463856.de122.abteilung.com,S=1258,W=1287:2,
1563104883.M883187P502037.de122.abteilung.com,S=1258,W=1287:2,
1563105603.M799240P519637.de122.abteilung.com,S=1258,W=1287:2,
1563106561.M419884P547969.de122.abteilung.com,S=1258,W=1287:2,
1563107524.M145768P582635.de122.abteilung.com,S=1258,W=1287:2,
1563108483.M632493P607265.de122.abteilung.com,S=1258,W=1287:2,
1563109203.M675460P633790.de122.abteilung.com,S=1258,W=1287:2,
1563110163.M299406P663234.de122.abteilung.com,S=1258,W=1287:2,
1563111121.M682713P685072.de122.abteilung.com,S=1258,W=1287:2,
Run Code Online (Sandbox Code Playgroud)

请问在 GNU 中awkegrep还是sed

Ste*_*ris 35

这就是cut命令的用途。

cut -d';' -f2-
Run Code Online (Sandbox Code Playgroud)


Fre*_*ddy 15

另一种sed变体:

sed 's/^[^;]*;//' file
Run Code Online (Sandbox Code Playgroud)

用空字符串替换[^;]*行首(第一个^)后跟分号的任何非分号字符 ( ) 。


kar*_*bal 9

awk

awk 'BEGIN { FS = ";" } ; { print $2 }' 
Run Code Online (Sandbox Code Playgroud)

或者,甚至更简单

awk -F";" '{print $2}'
Run Code Online (Sandbox Code Playgroud)

(谢谢你,ilkkachu,这个简化版)

  • `awk -F";" '{print $2}'` 相同但更短 (2认同)

sch*_*ity 6

使用 GNU sed

sed -E 's/^.*;(.*)/\1/' file
Run Code Online (Sandbox Code Playgroud)

使用 GNU grep

grep -Po '(?!.*;).*' file 
Run Code Online (Sandbox Code Playgroud)


小智 6

< inputfile egrep ';' | cut -f 2 -d ';'
Run Code Online (Sandbox Code Playgroud)

-这个命令,你会得到这个!

  • 我建议测试它。 (2认同)

ter*_*don 5

正如现有答案已经表明的那样,有很多方法可以做到这一点。这是另一种 GNUgrep方法:

$ grep -oP ';\K.*' file
1563101282.M178569P409830.de122.abteilung.com,S=1258,W=1287:2,
1563102004.M49870P436474.de122.abteilung.com,S=1258,W=1287:2,
1563102961.M195946P457876.de122.abteilung.com,S=1258,W=1287:2,
1563103921.M334168P463856.de122.abteilung.com,S=1258,W=1287:2,
1563104883.M883187P502037.de122.abteilung.com,S=1258,W=1287:2,
1563105603.M799240P519637.de122.abteilung.com,S=1258,W=1287:2,
1563106561.M419884P547969.de122.abteilung.com,S=1258,W=1287:2,
1563107524.M145768P582635.de122.abteilung.com,S=1258,W=1287:2,
1563108483.M632493P607265.de122.abteilung.com,S=1258,W=1287:2,
1563109203.M675460P633790.de122.abteilung.com,S=1258,W=1287:2,
1563110163.M299406P663234.de122.abteilung.com,S=1258,W=1287:2,
1563111121.M682713P685072.de122.abteilung.com,S=1258,W=1287:2,
Run Code Online (Sandbox Code Playgroud)

-o品牌GREP仅打印该行的匹配部分和-P使Perl兼容的正则表达式。PCRE 的\K意思是“忽略之前匹配的任何内容”。将所有这些放在一起,该命令将找到第一个;,丢弃它,然后打印该行的其余部分。

另一种选择是在其 awk-mode ( -a) 中使用 perl :

$ perl -F';' -lane 'print $F[1]' file
1563101282.M178569P409830.de122.abteilung.com,S=1258,W=1287:2,
1563102004.M49870P436474.de122.abteilung.com,S=1258,W=1287:2,
1563102961.M195946P457876.de122.abteilung.com,S=1258,W=1287:2,
1563103921.M334168P463856.de122.abteilung.com,S=1258,W=1287:2,
1563104883.M883187P502037.de122.abteilung.com,S=1258,W=1287:2,
1563105603.M799240P519637.de122.abteilung.com,S=1258,W=1287:2,
1563106561.M419884P547969.de122.abteilung.com,S=1258,W=1287:2,
1563107524.M145768P582635.de122.abteilung.com,S=1258,W=1287:2,
1563108483.M632493P607265.de122.abteilung.com,S=1258,W=1287:2,
1563109203.M675460P633790.de122.abteilung.com,S=1258,W=1287:2,
1563110163.M299406P663234.de122.abteilung.com,S=1258,W=1287:2,
1563111121.M682713P685072.de122.abteilung.com,S=1258,W=1287:2,
Run Code Online (Sandbox Code Playgroud)

或者像 sed 一样使用 perl 并删除第一个之前的所有内容;

$ perl -pe 's/.*?;//' file
1563101282.M178569P409830.de122.abteilung.com,S=1258,W=1287:2,
1563102004.M49870P436474.de122.abteilung.com,S=1258,W=1287:2,
1563102961.M195946P457876.de122.abteilung.com,S=1258,W=1287:2,
1563103921.M334168P463856.de122.abteilung.com,S=1258,W=1287:2,
1563104883.M883187P502037.de122.abteilung.com,S=1258,W=1287:2,
1563105603.M799240P519637.de122.abteilung.com,S=1258,W=1287:2,
1563106561.M419884P547969.de122.abteilung.com,S=1258,W=1287:2,
1563107524.M145768P582635.de122.abteilung.com,S=1258,W=1287:2,
1563108483.M632493P607265.de122.abteilung.com,S=1258,W=1287:2,
1563109203.M675460P633790.de122.abteilung.com,S=1258,W=1287:2,
1563110163.M299406P663234.de122.abteilung.com,S=1258,W=1287:2,
1563111121.M682713P685072.de122.abteilung.com,S=1258,W=1287:2,
Run Code Online (Sandbox Code Playgroud)