【问题标题】:linux script shell : grep a part of path in a list of pathlinux脚本shell:在路径列表中grep路径的一部分
【发布时间】:2014-11-17 09:46:23
【问题描述】:

在我的脚本外壳中,我有 2 个文件。第一个是一个只包含文件名的文件,其中包含部分路径:

列表1:

aaa/bbb/file1.ext
ccc/ddd/file2.ext
eee/fff/file3.ext

第二个是扩展名为“.ext”的每个文件的列表,它们前面带有绝对路径:

列表2:

/home/.../aaa/bbb/file1.ext
...
...
...
/home/...ccc/ddd/file2.ext
...

我正在尝试提取第二个文件 list2 的行,其中包含使用 grep 的第一个文件的行。

现在我试过了:

while read line
do
    grep "$line" "list1" 
done < list2

但是这个命令并没有输出任何东西,但是命令

grep "aaa/bbb/file1.ext" "list1"

有我在等待的输出

/home/.../aaa/bbb/file1.ext

有人看到我在这个脚本中遗漏了什么吗?谢谢

【问题讨论】:

    标签: linux shell grep


    【解决方案1】:

    这是grep 中的-f 选项非常方便的情况之一:

    grep -f f1 f2
    

    对于给定的输入返回:

    /home/.../aaa/bbb/file1.ext
    /home/...ccc/ddd/file2.ext
    

    来自man grep

    -f 文件,--file=文件

    从 FILE 中获取模式,每行一个。空文件包含零 模式,因此不匹配。 (-f 指定为 POSIX。)

    【讨论】:

    • 这似乎是一个很好的解决方案,但它在我的情况下不起作用......再次没有输出。
    • 你能提供更具体的输入吗?
    • 事实上,您使用我的示例文件进行的测试对我来说非常有效,所以我认为我必须检查我创建文件的方式才能执行此命令。感谢您的回答
    • +1 :很好的答案和解释很抱歉对问题有误解,但由于连接问题无法回复。 @fedorqui
    • 感谢@Skynet!这对你很好。请注意,您的答案缺少 read 部分。通常,要安全地读取文件,您将使用while IFS= read -r line; do ... ; done &lt; fileIFS= 将字段分隔符设置为空格,-r 可避免某些字段包含斜杠时出现问题。
    猜你喜欢
    • 2021-09-04
    • 2016-07-16
    • 2011-07-15
    • 1970-01-01
    • 2013-11-28
    • 2016-02-06
    • 2013-02-09
    • 1970-01-01
    • 2012-08-07
    相关资源
    最近更新 更多