Shell脚本从日志消息行中提取文件名

时间:2014-08-21 08:18:45

标签: bash shell terminal

我有一些行列出的txt文件。每行包含图像名称。我想要的是,编辑相同txt文件的shell脚本或将特定图像名称复制到新文件。

这是我的txt文件,其中包含带有路径的图像列表。 enter image description here

我想要这样的输出:

enter image description here

我想只从这些行中提取图像名称。

5 个答案:

答案 0 :(得分:1)

使用gnu sed即可:

sed -r 's~^[^[:blank:]]*/([^/ ]+) .*$~\1~' file
1.png
1@2x.png
2.png
2@2x.png
3.png

答案 1 :(得分:1)

您可以使用此awk

awk '{ split($1,arr,"/"); print arr[length(arr)] }' yourfile > output.txt

答案 2 :(得分:0)

您可以执行以下操作:

cat the_file.txt|while read file; do
    echo $(basename $file)
done

并且(如果需要)将输出重定向到另一个文件。

答案 3 :(得分:0)

while read fn rest
do
    basename "$fn"
done < file.txt

这将逐行读取您的输入。它会将文件名(包括路径)放入fn变量,并将该行的其余部分放入rest。然后它使用basename命令去掉路径并打印出文件名本身。

答案 4 :(得分:0)

这是另一个sed解决方案,它不使用扩展正则表达式(更便携的解决方案):

sed 's/^.*\/\([^[:blank:]\/]*\)[[:blank:]].*$/\1/' sourceFile > destFile

您必须分别将sourceFiledestFile白色替换为oridinal和destination文件的路径。

该命令查找没有空格字符或斜杠\([^[:blank:]\/]*\)的任何字符串,前面有斜杠^.*\/,后跟空白字符[[:blank:]].*$,而不是使用第一个匹配字符串替换模式/\1/ {1}}。

您可以阅读快速sed参考here