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

Regex 用文件中的行号替换字符串,regex,bash,awk,sed,Regex,Bash,Awk,Sed,我用bash脚本的行号替换所有退出代码 示例文件: 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 目前我正在这样做: cat -n file |sed

我用bash脚本的行号替换所有退出代码

示例文件:

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
目前我正在这样做:

cat -n file |sed "s/\([[:blank:]]*[0-9]\+\)\(.*\)\(exit[[:blank:]]*\)\([0-9]\+\)\(.*\)/\1\2\3\1\5/" | sed "s/[[:blank:]]*[0-9]\+[[:blank:]]//"
这项工作可以完成,但对于一项简单的任务来说,它似乎太复杂了


有什么建议可以帮助我有效地完成这项工作吗?

您可以使用更简单的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

awk'{sub(/\您可以使用这个更简单的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
awk'{sub(/\这可能适合您(GNU-sed):

或者使用两个sed应用程序,而不是
cat-n
和sed:

sed '/exit\s[0-9]/=' file | sed -r 'N;s/^(\S+)\n(.*exit\s)[0-9]*/\2\1/;P;D'
这可能适用于您(GNU-sed):

或者使用两个sed应用程序,而不是
cat-n
和sed:

sed '/exit\s[0-9]/=' file | sed -r 'N;s/^(\S+)\n(.*exit\s)[0-9]*/\2\1/;P;D'