我将这一行拼凑在一起以更改csv文件中的值。它完美无缺,除了它删除所有空间。如果有人能解释我做错了什么,我会很感激。
perl -pne 's/\s+(-?\d+\.?\d*)/$1>100?1000:$1/ge
答案 0 :(得分:5)
一切与正则表达式的LHS相匹配
\s+(-?\d+\.?\d*)
将被替换。这包括与\s+
匹配的空格。您可以使用零宽度后视断言,如Matt建议的那样:
perl -pe 's/(?<=\s)(-?\d+\.?\d*)/$1>100?1000:$1/ge' file
或特殊的\K
表单,它将保留&#34; \K
之前的所有内容:
perl -pe 's/\s+\K(-?\d+\.?\d*)/$1>100?1000:$1/ge' file
请注意,-p
和-n
都会遍历输入文件的每一行,因此您只需要一个或另一个(尽管-p
会覆盖-n
如果你指定两者)。我使用-p
因为它会自动打印每一行。详情请见perldoc perlrun
。