我有一个类似的文件构建:
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
答案 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 / ...