我正在用bash脚本的行号替换所有退出代码。
示例文件:
long startTime = System.nanoTime();
for (int i = 0; i < 5000; i++){
linked.add(testData[i]);
}
long endTime = System.nanoTime();
System.out.println("Average time: " +(endTime - startTime)/5000 );
示例输出:
echo something
if conditional;then exit 1;fi
echo something else
if conditional;then exit 2;fi
目前我这样做:
echo something
if conditional;then exit 2;fi
echo something else
if conditional;then exit 4;fi
这项工作起作用,但对于简单的任务而言似乎过于复杂。
我有什么建议可以有效地做到这一点吗?
答案 0 :(得分:6)
您可以使用这个更简单的awk命令:
awk '{sub(/\<exit[[:blank:]]+[0-9]+/, "exit " NR)} 1' file
echo something
if conditional;then exit 2;fi
echo something else
if conditional;then exit 4;fi
NR
代表当前记录#或行#\<exit [0-9]+
用于匹配exit <digits>
,其中\<
用于字边界答案 1 :(得分:0)
这可能适合你(GNU sed):
cat -n file | sed -r 's/^(\s*(\S*).*exit\s)[0-9]+/\1\2/;s/^\s*\S*\t//'
或使用sed而不是cat -n
和sed:
sed '/exit\s[0-9]/=' file | sed -r 'N;s/^(\S+)\n(.*exit\s)[0-9]*/\2\1/;P;D'