我有一个文本文件,其中每一行都是格式为
的单个字符串/home/usr1/284.txt
整个文件就像
/home/usr1/284.txt
/home/usr1/361.txt
我想删除/home/usr1/
并保留文件名,例如284.txt
如何使用linux / unix命令执行此操作?
答案 0 :(得分:4)
sed -e 's!/home/usr1/!!' filename.txt
或
awk -F\/ {print $NF} filename.txt
应该做的伎俩。请注意在!
示例中使用/
而不是更常见的sed
作为模式分隔符 - 这意味着您不必在模式中转义文字/
字符
答案 1 :(得分:3)
由于文件中的字段是固定的,您只需执行以下操作:
cut -b 12-
跳过输入的前11个字节。
答案 2 :(得分:1)
试试这个:
while read line; do basename "$line"; done < filename
basename
的倒数为dirname
,以防您最终需要其他部分。
答案 3 :(得分:1)
你也可以像这样使用Perl:
perl -pe 's,.*/,,' file.txt
答案 4 :(得分:0)
得到了什么?
read -d '' -a lines < input.txt
echo "${lines[@]##*/}"
答案 5 :(得分:0)
有多种方法可以做到这一点(TIMTOWTDI)。除了现有的答案,我可以想到两种解决方法:
使用斜杠“ /”作为字段定界符:反转,剪切第一个字段,然后再次反转:
< filename.txt rev | cut -d/ -f 1 | rev
这些是文件名,因此,可以将GNU basename
与xargs
(或GNU parallel
)结合使用,以“保留文件名”的方式进行操作:
< filename.txt xargs basename -a
或
< filename.txt parallel -X basename -a