2014-01-24 34 views
0

我尝试修改文件中的行,其中每行都是命令,我需要将连续的数字作为参数提供给不同的行。通过循环遍历文件并添加连续号码

BestFirst - > BestFirst -D 5 -N 5

BestFirst - > BestFirst -D 5 -N 10

BestFirst - > BestFirst -D 5 -N 15

...

BestFirst - > BestFirst -D 10 -N 15

...

BestFirst - > BestFirst -D 100-N 100

我试图启动与-N选项,但没有与此取得成功:

counter=5; while read line; do echo $line | sed -e "s/BestFirst/BestFirst -D 5 -N $counter/"; counter=$[ counter+5 ]; done < attribute_selectors_cfssubeval_bestfirst_various_parameters.csv 

这将返回或多或少正确的事情,但不会修改文件本身。

如何以正确的方式修改文件?

+0

原始文件是否真的只是字符串“BestFirst”重复多次?看起来,使用适当的'awk'脚本从头开始生成整个文件会更快,而不是分别在输入文件的每一行上调用'sed'。 – chepner

+0

@chepner我确定你是对的,我看到了一些类似awk问题的解决方案。我只是不明白awk使用它。 – aldorado

回答

2

你只是忘了在你的sed命令中确定输出文件。请尝试以下操作:

counter=5; while read line; do echo $line | sed -e "s/BestFirst/BestFirst -D 5 -N $counter/" >> result.csv; counter=$[ counter+5 ]; done < attribute_selectors_cfssubeval_bestfirst_various_parameters.csv 

结果将在文件results.csv

编辑:如果你想修改你正在阅读的同一个文件:我不认为这是一个好主意。如果希望文件具有完全相同的名称,则可以在删除源后重命名结果文件。

+0

关于你的编辑:我是那么做的。修改或创建第二个并重命名 - 并没有多少额外的努力 – aldorado

+0

很高兴我可以帮助:) – omgBob