从bash中没有点扩展名的文件中删除行

时间:2015-02-04 12:51:49

标签: bash awk sed lines

我的文件包含以下行:

/folder/share/folder1
/folder/share/folder1/file.gz
/folder/share/folder2/11072012
/folder/share/folder2/11072012/file1.rar

我正在尝试删除这些行:

/folder/share/folder1/
/folder/share/folder2/11072012

要获得以下最终结果:

/folder/share/folder2/11072012/file1.rar
/folder/share/folder1/file.gz

换句话说,我试图只保留文件的路径,而不是目录。

4 个答案:

答案 0 :(得分:1)

awk -F/ '$NF~/\./{print}'
  • 使用命令行开关-F
  • 拆分字符“/”上的输入记录
  • 检查输入记录的最后一个字段$NF(其中NF是输入记录中的字段数),以查看它是否包含字符“。”。 (!~运算符)
  • 如果匹配,则输入记录。

实施例

$ echo -e '/folder/share/folder.2/11072012
/folder/share/folder2/11072012/file1.rar' | mawk -F/ '$NF~/\./{print}'
/folder/share/folder2/11072012/file1.rar
$

注意:我的微博仅在完整路径的文件名部分中查看.

在我的第一篇文章中

编辑我颠倒了逻辑,打印无点文件而不是点缀文件。

答案 1 :(得分:0)

您可以使用find命令仅获取文件列表

find <directory> -type f

答案 2 :(得分:0)

使用 awk:

awk -F/ '$NF ~ /\./{print}' File

/设置为分隔符,检查最后一个字段($NF)是否包含.,如果是,则打印该行。

答案 3 :(得分:0)

仅文字结果

sed -n 'H
$ {g
:cycle
   s/\(\(\n\).*\)\(\(\2.*\)\{0,1\}\)\1/\3\1/g
   t cycle
   s/^\n//p
   }' YourFile
  • 基于文件名和文件夹名称,假定:

      其他行内的
    • 行是文件夹,uniq是文件(可以在结果上通过OS文件存在文件完成)
    • 行被排序(至少在文件夹和文件之间)
  • 在GNU sed

  • 上的--posix posix版本