Bash 如何替换最后一个字符并在字符串开头插入一个字符?

Bash 如何替换最后一个字符并在字符串开头插入一个字符?,bash,shell,sed,Bash,Shell,Sed,假设我有一个文本文件,如下所示: accio. aguamenti. alohomora. aparecium. 我想得到的是: -accio! -aguamenti! -alohomora! -aparecium! 这就是我尝试过的: sed 's/.*[a-z]/-&!/g' 这将产生: -accio!. -alohomora!. 这很接近,但显然不是我需要的。帮助?您可以使用捕获组: sed -E 's/^(.*).$/-\1!/' file -accio! -aguam

假设我有一个文本文件,如下所示:

accio.
aguamenti.
alohomora.
aparecium.
我想得到的是:

-accio!
-aguamenti!
-alohomora!
-aparecium!
这就是我尝试过的:

sed 's/.*[a-z]/-&!/g'
这将产生:

-accio!.
-alohomora!.

这很接近,但显然不是我需要的。帮助?

您可以使用捕获组:

sed -E 's/^(.*).$/-\1!/' file

-accio!
-aguamenti!
-alohomora!
-aparecium!
如果您的行在最后一个字母之前仅包含小写英文字母,如您的问题所示,则您还可以使用:

sed -E 's/^([a-z]+).*$/-\1!/' file

您可以使用捕获组:

sed -E 's/^(.*).$/-\1!/' file

-accio!
-aguamenti!
-alohomora!
-aparecium!
如果您的行在最后一个字母之前仅包含小写英文字母,如您的问题所示,则您还可以使用:

sed -E 's/^([a-z]+).*$/-\1!/' file
分两步进行:

$ sed 's/^/-/;s/.$/!/' infile
-accio!
-aguamenti!
-alohomora!
-aparecium!
$ sed  -e 's/\.$/!/' -e 's/.*/-&/' file
第一个命令用
-
“替换”每行的开头,有效地插入它;第二个命令将最后一个字符替换为

$ sed 's/^/-/;s/.$/!/' infile
-accio!
-aguamenti!
-alohomora!
-aparecium!
$ sed  -e 's/\.$/!/' -e 's/.*/-&/' file

第一个命令用
-
“替换”每行的开头,有效地插入它;第二个命令将最后一个字符替换为

您需要使用捕获组来排除结尾处的角色:

$ sed  's/^\(.*\)\.$/-\1!/' file
或者分两步进行:

$ sed 's/^/-/;s/.$/!/' infile
-accio!
-aguamenti!
-alohomora!
-aparecium!
$ sed  -e 's/\.$/!/' -e 's/.*/-&/' file

您需要使用捕获组来排除结尾处的角色:

$ sed  's/^\(.*\)\.$/-\1!/' file
或者分两步进行:

$ sed 's/^/-/;s/.$/!/' infile
-accio!
-aguamenti!
-alohomora!
-aparecium!
$ sed  -e 's/\.$/!/' -e 's/.*/-&/' file