sed:删除除模式以外的所有内容

时间:2018-08-08 16:13:46

标签: regex sed

我有一个类似的文件构建:

  

smthPATTERNsmthPATTERN
  PATTERNsmthPATTERN
  smthPATTERNsmthPATTERNPATTERN

规则是:
“ smth”可以是“ PATTERN”以外的任何内容
每个“ smth”都可以不同
regex可以很好地定义“ PATTERN”

是否有sed命令删除除模式以外的所有内容。
上面的结果将是:

  

PATTERNPATTERN
  PATTERNPATTERN
  PATTERNPATTERNPATTERN

如果不做爱呢?

实际示例:

14:New: [42.083482 11945.506401 3791.240272], time 0.5000000  
34:New: [70.367422 11591.443051 3686.804348], time 2.4999999  
59:New: [55.001608 11181.824750 3529.426501], time 4.4999999  
84:New: [46.503589 10733.180988 3400.994526], time 6.4999999  
109:New: [48.331394 10438.083437 3321.319648], time 8.5000000  
134:New: [42.924864 10101.462941 3208.426613], time 10.5000000  

PATTRN是浮点数(正则表达式[0-9] * \。[09] *)
我希望得到这样的结果:

42.083482 11945.506401 3791.240272 0.5000000  
70.367422 11591.443051 3686.804348 2.4999999  
55.001608 11181.824750 3529.426501 4.4999999  
46.503589 10733.180988 3400.994526 6.4999999  
48.331394 10438.083437 3321.319648 8.5000000  
42.924864 10101.462941 3208.426613 10.5000000  

3 个答案:

答案 0 :(得分:0)

使用带有sed的替换命令,您可以执行以下操作:

sed -E  "s/smth-//g" file

答案 1 :(得分:0)

sed正则表达式不容易让您说“除模式之外的任何内容”。试试

sed 's/[^p]\|p\($\|[^a]\)\|pa\($\|[^t]\)\|pat\($\|[^t]\)\|patt\($\|[^e]\)\|patte\($\|[^r]\)\|patter\($\|[^n]\)//g'

像Perl这样的现代正则表达式可以让您轻松完成

perl -pe 's/(?!pattern).//g'

答案 2 :(得分:-1)

您需要定义“-”作为字段分隔符,然后像普通替换一样使用sed / s / ...

相关问题