确定并更改 sed 列

问题描述 投票:0回答:2

我有一个包含 3 列的文件,用逗号分隔并用方括号括起来..:

我想将所有行中以“e-3*”结尾的条目更改为“0”。

[6.902532920683853e-31,42,27.600000381469727],
[6.902532920683853,42e-31,27.600000381469727],
[6.902532920683853e,42,27.600000381469727e-32],

to

[0,42,27.600000381469727],
[6.902532920683853,0,27.600000381469727],
[6.902532920683853e,42,0],

我尝试了 sed,但我不知道如何寻址列。

这适用于第一列,但删除第二行中的第一列 以及第三行的第一列和第二列。

cat columns.test |sed 's/[0-9].*e-31/0/'

[0,42,27.600000381469727],
[0,27.600000381469727],
[0],

sed
2个回答
0
投票

我认为问题是你的模式对于你想要的来说太笼统了。我设法通过使用以下内容获得预期的输出:

sed -r 's/(\[|,)[0-9]+(:?\.[0-9]+)?e\-[0-9]+/\10/g'

这可能不是最有效的模式,但它应该涵盖您的用例。

您可以在here看到它的工作原理,但其想法是,它将匹配一个左方括号或逗号,然后是任何以“e-”结尾的数字字符串(可选地带有小数点),后跟 1 或更多数字。所有内容都被替换为对第一个匹配项的引用(开括号“[”或逗号“,”),后跟文字“0”。


0
投票

也谢谢您,特别是https://regexr.com/

的链接
© www.soinside.com 2019 - 2024. All rights reserved.