Shell 某些列上的grep

Shell 某些列上的grep,shell,Shell,我在使用lftp的ftps服务器上。当我运行ls时,我会得到这样的结果,没有附加标志: 02-19-18 11:32AM <DIR> Wingdings 01-31-18 05:17PM <DIR> Dongles 02-20-18 08:21AM <DIR> Dingbats 02-20-18 09:42AM Fooba

我在使用lftp的ftps服务器上。当我运行ls时,我会得到这样的结果,没有附加标志:

02-19-18  11:32AM       <DIR>          Wingdings
01-31-18  05:17PM       <DIR>          Dongles
02-20-18  08:21AM       <DIR>          Dingbats
02-20-18  09:42AM                      Foobars
01-25-18  11:19AM                      Coolcats
02-13-18  02:51AM                      McDonald
但这会截断前三列,这是我想要的

有没有办法做到这一点:

lftp xxx@xxx:/> ****** some magical command ******
01-31-18  05:17PM       <DIR>          Dimwits
02-20-18  08:21AM       <DIR>          Dingbats
02-13-18  02:51AM                      McDonald

列出文件和目录的正确命令是:

lftp xxx@xxx:/> glob -a echo *D*
输出:

Dongles Dingbats DIR DIR DIR...
这个列表文件和dirs-a,不需要解析ls

检查:

man lftp | less +/glob

我可以要求您尝试使用以下命令:-

lftp xxx@xxx:/> ls | grep "*D???"

要仅获取给定列中包含字符串的行,并获取此行的所有列作为结果,请使用以下命令:

 ls | awk '($3 == "<DIR>" && $4 ~ /D/) || ($3 != "<DIR>" && $3 ~ /D/) { print }'

如果要在最后一个字段中查找D,请查找后面没有字段SEP的D。我想你需要标签,我已经用空格测试过了:

lftp xxx@xxx:/> ls | grep -E "D[^ \t]*$"

注意:我删除了两个标签,这两个标签都不合适。申请前请花时间阅读说明。只有1个接受答案?你的问题有那么独特吗?为什么不使用ls D*@anubhava grep在哪里?我只是运行了这个,它什么也没给我。@anubhava谢谢,这很有效。你能写一个带解释的答案吗?对不起,我需要一个更一般化的解决方案。我已经更新了问题。好的,最后一个字母总是以s结尾吗?不。这是假的数据。我用大量的文件夹、文件和过滤器在生产中运行这个程序。为了说明这一点,我再次更新了这个问题。我已经得到了这个结果。我正在寻找那个些左三列的文件,以及有问题的文件。是的,它实际上并没有给我任何结果。空白。你确定你在正确的目录中并且使用正确的命令吗?区分大小写?你的人lftp里有glob命令吗?LFTP | Version 4.8.3使用-a进行了修改,它只得到dir/file name列。我在问题中明确指出,我想要所有列。不知道你想做什么,但这不可靠,特别是如果你在目录或文件名中有空格
 ls | awk '($3 == "<DIR>" && $4 ~ /D/) || ($3 != "<DIR>" && $3 ~ /D/) { print }'
lftp xxx@xxx:/> ls | grep -E "D[^ \t]*$"