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

Jah*_*hid 1 bash awk sed

我将所有退出代码替换为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)

这项工作起作用但对于简单的任务来说似乎过于复杂.

有什么建议我怎么能有效地做到这一点?

anu*_*ava 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
Run Code Online (Sandbox Code Playgroud)
  • NR 代表当前记录#或行#
  • \<exit [0-9]+是用来匹配exit <digits>哪里\<是单词边界