我将所有退出代码替换为bash脚本的行号.
样本文件:
echo something
if conditional;then exit 1;fi
echo something else
if conditional;then exit 2;fi
Run Code Online (Sandbox Code Playgroud)
样本输出:
echo something
if conditional;then exit 2;fi
echo something else
if conditional;then exit 4;fi
Run Code Online (Sandbox Code Playgroud)
目前我这样做:
cat -n file |sed "s/\([[:blank:]]*[0-9]\+\)\(.*\)\(exit[[:blank:]]*\)\([0-9]\+\)\(.*\)/\1\2\3\1\5/" | sed "s/[[:blank:]]*[0-9]\+[[:blank:]]//"
Run Code Online (Sandbox Code Playgroud)
这项工作起作用但对于简单的任务来说似乎过于复杂.
有什么建议我怎么能有效地做到这一点?
您可以使用这个更简单的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
Run Code Online (Sandbox Code Playgroud)
NR 代表当前记录#或行#\<exit [0-9]+是用来匹配exit <digits>哪里\<是单词边界