2

以下是ma文件(sample.txt)的内容:

CQUAD4   5600000 560005  5602371 5602367 5602374 5602372 0.     -1.75
CQUAD4   5600003 560005  5600000 5602367 5602374 5602372 0.     -1.75

我正在使用以下命令:

sed -i "s@\(\s*\w*\s*\)\(5600000\)\(\s*\)\([0-9]*\)\(.*\)@\1\2\36000   \5@g" sample.txt

我想将模式匹配限制5600000为仅第二列,然后用“6000”替换。

有人可以帮我...请

4

2 回答 2

1

的可能解决方案。将搜索锚定到行首^

sed -i -r  "s@^(\s*\S+\s+)5600000\s+@\16000 @" sample.txt
于 2013-10-15T18:23:34.410 回答
0

awk可能会更自然一点:

awk '$2=="5600000"{$2="6000";print} 1' sample.txt

这基本上是说“如果第二个字段是 5600000,则将其替换为 6000 并打印该行,否则只打印该行”。

我看到的一个缺点是,根据您的版本,这可能会将awk多个空格折叠为一个,这可能会干扰您的列的对齐方式。你必须决定这是否有问题......

于 2013-10-15T19:04:51.007 回答