如何使用脚本来删除最后-xyz.mp4
一个文本文件列表。
现在我有一个很长的text
清单需要更改
55363642b-b13218-4cb0-8334-546565346-384.mp4
gfdggwg-e1321-4qwe-9ewq-de32155139d8-360.mp4
到
55363642b-b13218-4cb0-8334-546565346
gfdggwg-e1321-4qwe-9ewq-de32155139d8
答案1
$ sed 's/-[^-]*\.mp4$//' file
55363642b-b13218-4cb0-8334-546565346
gfdggwg-e1321-4qwe-9ewq-de32155139d8
该sed
表达式s/-[^-]*\.mp4$//
是一个替换,匹配破折号后跟任意数量的非破折号、点和字符串mp4
(位于该行的最末尾)。匹配的文本被删除。
要就地进行更改,请使用-i
以下标志sed
(但不首先运行以确保结果正确):
sed -i 's/-[^-]*\.mp4$//' file
如果这些是文件名,我将循环遍历实际文件:
for mp4file in *.mp4; do
printf 'The truncated name is "%s"\n' "${mp4file%-*.mp4}"
done
参数替换${mp4file%-*.mp4}
将扩展到文件名,并-*.mp4
从末尾删除最短的匹配字符串。
答案2
sed
解决方案。查找连字符、后跟 3 个字符、.mp4、行尾 ($),然后不替换任何内容。
读取“file”,将较短的名称写入文件“newfile”。
sed 's/-...\.mp4$//g' file >newfile
或就地编辑“文件”
sed -i 's/-...\.mp4$//g' file
答案3
使用awk
:
awk -F- -vOFS=- 'NF{NF-=1};1' file
这将用分隔每一行-
并删除最后一个字段,然后打印剩余的字段并重新添加破折号。