从 bash 中没有点扩展名的文件中删除行
remove lines from file that does not have dot extension in bash
我有这样的文件,其中包含如下行:
/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
换句话说,我试图只保留文件而不是目录的路径。
您可以使用 find 命令仅获取文件列表
find <directory> -type f
这个
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
$
注意:我的 microscript 仅在完整路径的文件名部分查看 .
。
编辑 在我的第一个 post 中我颠倒了逻辑,打印无点文件而不是点文件。
使用 awk:
awk -F/ '$NF ~ /\./{print}' File
设置/
作为分隔符,检查最后一个字段($NF
)是否有.
,如果有,打印该行。
纯文本结果
sed -n 'H
$ {g
:cycle
s/\(\(\n\).*\)\(\(.*\)\{0,1\}\)//g
t cycle
s/^\n//p
}' YourFile
基于文件名和文件夹名假设:
- 其他行里面的行是文件夹,uniq是文件(可以通过结果上的OS文件存在文件来完成)
- 行已排序(至少在文件夹和文件之间)
posix 版本 --posix
GNU sed
我有这样的文件,其中包含如下行:
/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
换句话说,我试图只保留文件而不是目录的路径。
您可以使用 find 命令仅获取文件列表
find <directory> -type f
这个
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
$
注意:我的 microscript 仅在完整路径的文件名部分查看 .
。
编辑 在我的第一个 post 中我颠倒了逻辑,打印无点文件而不是点文件。
使用 awk:
awk -F/ '$NF ~ /\./{print}' File
设置/
作为分隔符,检查最后一个字段($NF
)是否有.
,如果有,打印该行。
纯文本结果
sed -n 'H
$ {g
:cycle
s/\(\(\n\).*\)\(\(.*\)\{0,1\}\)//g
t cycle
s/^\n//p
}' YourFile
基于文件名和文件夹名假设:
- 其他行里面的行是文件夹,uniq是文件(可以通过结果上的OS文件存在文件来完成)
- 行已排序(至少在文件夹和文件之间)
posix 版本
--posix
GNU sed