使用shell脚本从文件中提取文件名


0

我有一个文本文件,其中包含以下行:

/u/tux/abc/spool/frtbla_mcdetc_0000149099_20101126135009990_1.tif

我想提取 frtbla_mcdetc_0000149099_20101126135009990_1.tif; 最后一次斜线后的单词( / )。


如果你愿意使用excel - 你很容易实现这一点 - “没有VB脚本”
Prasanna

Answers:


1

如果你在类似Linux的环境中,你可以使用 basename 效用:

basename $(<your_file)

谢谢..我想出了方法..首先我删除所有“/”而不是使用最后一个参数..但你的是最好的..
Grv

0

使用此命令

cat text_file_name | cut -d '/' -f 6

看起来我们俩同时回答了!只是为了您自己的启发,cut直接对文件进行操作。通常很简单 cat 一个档案属于已知的 - 在某种程度上是在判断上 - 作为一个“ 无用的使用 cat “;除非您正在查看文件或类似文件(尽管您可以再次使用 less
bertieb

@bertieb赞赏
psycho3

0

如果你知道目录结构的确切格式并且它不会改变,你可以使用 cut

$ cut -f6 -d '/' file.txt

这里使用cut将目录分隔符视为分隔符并提取第6个分隔符。

如果相反,你所知道的就是它 一行的最后一部分,但不知道目录结构 , 您可以使用 rev 以及:

$ rev file.txt | cut -f1 -d '/' | rev

这里的文件是颠倒的 第一 字段被提取,然后再次被反转。


0

以下内容适用于 所有 shell中的字符串,而不仅仅是文件名,并且比剪切容易得多,因为您不需要知道在您想要的字段之前有多少字段:

$ foo=/path/to/file/split/by/slashes.txt
$ echo ${foo##*/}
slashes.txt

这使用'贪婪的修剪',即修剪所有内容,直到最后的'/',如下所述:

https://stackoverflow.com/questions/3162385/how-to-split-a-string-in-shell-and-get-the-last-field

${foo  <-- from variable foo
  ##   <-- greedy front trim
  *    <-- matches anything
  /    <-- until the last '/'
 }

0

我不知道Aix中的标准shell是什么,但是 bash 可用并支持编辑的变量扩展。

如果您的全名在变量中 FileName, 然后 ${FileName##*/} 显示删除所有前导字符的名称,直到最后一个 /;相比之下 ${FileName#*/} 删除第一个 /,而 ${FileName%/*} 从最后删除尾随字符 / (即目录路径)。

如果您通过a生成文件名 find 命令,然后你需要一个像这样的命令:

find ... | while read FileName; do echo ${FileName##*/}; done

如果在文本文件中:

while read FileName; do echo ${FileName##*/}; done < FileList.txt

更换 echo 通过您需要对名称进行的任何处理来命令。


(我似乎已经与其他答案交叉了,但我会让我的答案成立,因为其他地方没有涉及到它的部分内容。)
AFH
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.