打印两个文件的共同点

打印两个文件的共同点

我想打印这两个文件的共同点

一个文件包含ls -l选项,另一个文件包含ls选项

ls只有文件名才 ls -l包含所有内容,包括权限和其他信息。

有没有办法让他们打印出通用的输出? comm 命令似乎不起作用(它会打印所有内容)

我试过了grep -f file1 file2,但什么也没出现

假设ls -l输出是

-rwx------ 1 username 230 date and the filename

ls

filname

我正在尝试获取文件名,也就是两个文件的并集。我认为没有办法在 shell 中读取文件名目录

我想要

filename

答案1

for i in ls-file; do grep -e $i$ ls-l-file; done

这将循环遍历ls-file(仅包含 ls 命令) 中的每一行,并将输出分配给 $i。然后,它会 greps ls-l-file(包含 ls -l 命令) 并查找匹配项,然后输出它。

更新

for i in ls-file; do grep -eo $i$ ls-l-file; done

-o 参数只会输出匹配的文本,因此仅输出文件名

更新 2

while read i; do  grep -oe $i$ ls-l-file; done < ls-file

这样效果更好。

答案2

您是到达那里的一部分。

您需要做的第一件事是从包含输出的文件中提取文件名ls -l,您可以使用

awk '{print $9}' < lsl_file

在我的操作系统上,文件名是第 9 列,在您的操作系统上可能与此列不同。

请注意comm要求对两个文件进行排序,ls和的输出应该已经是这种情况了ls -l

因此,你的一句话将是:

awk '{print $9}' < lsl_file | comm - ls_file

comm 的单破折号参数告诉它使用 STDIN。

重要假设:这假设您的文件名中没有空格。

相关内容