sed 命令用法将名称替换为空格

sed 命令用法将名称替换为空格

我有大量文件,其中一些名称位于真实文件名之前。以下是问题的示例:

Nora Hmann - sub-01.zip
Nora Hmann - sub-02.zip
Nora Hmann - sub-03.zip
Nora Hmann - sub-04.zip
Nora Hmann - sub-05.zip
Nora Hmann - sub-06.zip

现在使用 sed commnd 我想删除Nora Hmann -并保留sub-01.zip.有人可以帮我使用 sed 命令吗,因为要替换的字符串包含空格,sed 没有正确执行它。

答案1

删除此名称列表中最后一个空格后的后缀:

sed 's/.* //'

但如果目录中有几个文件,则使用起来更简单rename

rename 's/^.* //' *

答案2

使用以下命令:

sed -ie "s/Nora\ Hmann\ \-\ //g" stack

前:

Nora Hmann - sub-01.zip
Nora Hmann - sub-02.zip
Nora Hmann - sub-03.zip
Nora Hmann - sub-04.zip
Nora Hmann - sub-05.zip
Nora Hmann - sub-06.zip

后:

sub-01.zip
sub-02.zip
sub-03.zip
sub-04.zip
sub-05.zip
sub-06.zip

要循环它(我假设您从目录执行 bash 脚本,所有要修改的文件都位于该目录):

for i in `ls -w1`
do
 sed -ie "s/Nora\ Hmann\ \-\ //g" /path/to/$i
done

答案3

使用cutand 的另一个解决方案sed

cat filename.txt | cut -d'-' -f2- |  sed 's/^ //g'

另一个仅包含cut(并且仅在名称由名字和姓氏组成并用空格分隔的情况下):

cat filename.txt | cut -d' ' -f4-

答案4

如果您不介意丢失第二个-,另一种解决方案是使用tr

x='Nora Hmann - sub-01.zip'
printf '%s\n' "$x" | tr -d 'NoraHmn -'
sub01.zip

请注意,这依赖于集合“NoraHmn -”中的字符不与 相交的事实sub*.zip

相关内容