从文本文件中删除变量结尾

从文本文件中删除变量结尾

如何使用脚本来删除最后-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

这将用分隔每一行-并删除最后一个字段,然后打印剩余的字段并重新添加破折号。

相关内容