从每一行中删除部分字符串

时间:2012-03-09 17:10:09

标签: regex linux shell unix command-line

我有一个文本文件,其中每一行都是格式为

的单个字符串
/home/usr1/284.txt

整个文件就像

/home/usr1/284.txt
/home/usr1/361.txt

我想删除/home/usr1/并保留文件名,例如284.txt

如何使用linux / unix命令执行此操作?

6 个答案:

答案 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)。除了现有的答案,我可以想到两种解决方法:

  1. 使用斜杠“ /”作为字段定界符:反转,剪切第一个字段,然后再次反转:

    < filename.txt rev | cut -d/ -f 1 | rev
    
  2. 这些是文件名,因此,可以将GNU basenamexargs(或GNU parallel)结合使用,以“保留文件名”的方式进行操作:

    < filename.txt xargs basename -a
    

    < filename.txt parallel -X basename -a