用文件中的行号替换字符串

时间:2015-08-07 16:24:47

标签: bash awk sed

我正在用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

这项工作起作用,但对于简单的任务而言似乎过于复杂。

我有什么建议可以有效地做到这一点吗?

2 个答案:

答案 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'