我有大量文件,其中一些名称位于真实文件名之前。以下是问题的示例:
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
使用cut
and 的另一个解决方案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
。