我想打印这两个文件的共同点
一个文件包含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。
重要假设:这假设您的文件名中没有空格。