需要 Sed 命令的多次替换帮助

需要 Sed 命令的多次替换帮助

我需要一个带有 sed 命令的文件 我有一个这样的文件

amb/eng/hello.amb

我需要输出如下

amx/eng/hello.amx
amx-grk/eng/hello.amx

有人可以帮助我吗?

答案1

你可以使用sed -e 's/amb/amx/gp' -e 's/amx/&-grk/' yourfile.

前任。

$ echo 'amb/eng/hello.amb' | sed -e 's/amb/amx/gp' -e 's/amx/&-grk/'
amx/eng/hello.amx
amx-grk/eng/hello.amx

答案2

这类似于钢铁司机的回答,但匹配稍微严格一些。

$ sed '\,^amb/\(.*\)\.amb$, { s,,amx/\1.amx,p; s/amx/&-grk/; }' file
amx/eng/hello.amx
amx-grk/eng/hello.amx

在上面的命令中,我们假设我们正在查找以 开头amb/和结尾的行.amb。当找到这样的行时,执行的初始替换命令将这两个子字符串分别更改为amx/.amx,然后输出修改后的行。第二次替换将初始amx字符串(我们知道它出现在行的开头)更改为amx-grk。第二次修改的结果由循环结束时的默认输出输出。

我在脚本开头使用逗号作为触发正则表达式的分隔符sed,并s在大括号内的表达式组内使用命令,因为我想在命令中包含斜杠。


编写此精确命令的另一种方法是使用b(“branch”) 作为不是修改与初始正则表达式不匹配的任何行。这允许我们将命令编写为三个单独的表达式:

$ sed -e '\,^amb/\(.*\)\.amb$, !b' -e 's,,amx/\1.amx,p' -e 's/amx/&-grk/' file
amx/eng/hello.amx
amx-grk/eng/hello.amx

答案3

您可以尝试以下操作:

sed 's/amb/amx/g' |  awk -F'/' '{print $1"/"$2"/"$3 " " $1"-grk/"$2"/"$3}'

例如

$ echo  'amb/eng/hello.amb' | sed 's/amb/amx/g' |  awk -F'/' '{print $1"/"$2"/"$3 " " $1"-grk/"$2"/"$3}'
amx/eng/hello.amx amx-grk/eng/hello.amx

相关内容