如何使用bash删除一行到特定字符的最后一个实例?

时间:2014-04-26 22:58:42

标签: string bash unix split

我有一个由md5生成的数千行的文件,其中包含哈希,然后是每行的路径。我正在搜索数百个sed示例,但无法解读它们。

我如何处理并包括每行的最后一个斜杠,然后只输出文件名?

fd373e07fd6f85085455a7d03a6ea8d8 /Volumes/yadda/20121007-083424-MDT-5DM35545.CR2
b4108ee8509dbfd0e8fd93effbb2c87f /Volumes/yadda/20121007-083424-MDT-5DM35546.CR2
98188a4e073a65d39840b34446228533 /Volumes/yadda/20121007-083424-MDT-5DM35547.CR2
7fe69f18e1a216a7a68812b1b3322764 /Volumes/yadda/20121007-083424-MDT-5DM35548.CR2
7b48289014eddab153a819a460a46f83 /Volumes/yadda/20121007-083424-MDT-5DM35549.CR2
832f43451691fa4e8577f66820f8714c /Volumes/yadda/20121007-083424-MDT-5DM35550.CR2

对于输出,我只想要文件名:

5DM35545.CR2
5DM35546.CR2
5DM35547.CR2
5DM35548.CR2
5DM35549.CR2
5DM35550.CR2

我知道我只能删除哈希值然后使用basename,但我希望在一次操作中完成它,并学习一点sed。

感谢您不要捣毁新手。

3 个答案:

答案 0 :(得分:3)

awk -F- '{ print $NF }' input.txt

-F告诉awk字段分隔符,在您的情况下应为-$NF表示最后一个字段。 input.txt应该是包含文件名的文件,每个文件名都在不同的行上。

答案 1 :(得分:2)

你可以做这样的事情

sed 's|.*-MDT-||' data_file

此正则表达式删除每行中-MDT之前的所有内容

答案 2 :(得分:0)

我不知道你对这些名称做了什么,但是如果要在以后的文件中运行循环的脚本中使用它们,你可以在循环中包含这个转换:

#!/bin/bash

while read -r md5 file; do
    [[ -z $md5 ]] && continue
    base=${file##*-}
    echo "md5: $md5"
    echo "file:$file"
    echo "base: $base"
done < input.txt

<强>测试

$ while read -r md5 file; do
    [[ -z $md5 ]] && continue
    base=${file##*-}
    echo "md5: $md5"
    echo "file:$file"
    echo "base: $base"
done <<EOF
fd373e07fd6f85085455a7d03a6ea8d8 /Volumes/yadda/20121007-083424-MDT-5DM35545.CR2
b4108ee8509dbfd0e8fd93effbb2c87f /Volumes/yadda/20121007-083424-MDT-5DM35546.CR2
98188a4e073a65d39840b34446228533 /Volumes/yadda/20121007-083424-MDT-5DM35547.CR2
7fe69f18e1a216a7a68812b1b3322764 /Volumes/yadda/20121007-083424-MDT-5DM35548.CR2
7b48289014eddab153a819a460a46f83 /Volumes/yadda/20121007-083424-MDT-5DM35549.CR2
832f43451691fa4e8577f66820f8714c /Volumes/yadda/20121007-083424-MDT-5DM35550.CR2
EOF
md5: fd373e07fd6f85085455a7d03a6ea8d8
file:/Volumes/yadda/20121007-083424-MDT-5DM35545.CR2
base: 5DM35545.CR2
md5: b4108ee8509dbfd0e8fd93effbb2c87f
file:/Volumes/yadda/20121007-083424-MDT-5DM35546.CR2
base: 5DM35546.CR2
md5: 98188a4e073a65d39840b34446228533
file:/Volumes/yadda/20121007-083424-MDT-5DM35547.CR2
base: 5DM35547.CR2
md5: 7fe69f18e1a216a7a68812b1b3322764
file:/Volumes/yadda/20121007-083424-MDT-5DM35548.CR2
base: 5DM35548.CR2
md5: 7b48289014eddab153a819a460a46f83
file:/Volumes/yadda/20121007-083424-MDT-5DM35549.CR2
base: 5DM35549.CR2
md5: 832f43451691fa4e8577f66820f8714c
file:/Volumes/yadda/20121007-083424-MDT-5DM35550.CR2
base: 5DM35550.CR2