gpt4 book ai didi

linux - 如何转义 ls 输出中的方括号

转载 作者:太空狗 更新时间:2023-10-29 11:42:08 24 4
gpt4 key购买 nike

我在转义任何文件名中的方括号时遇到了一些问题。

我需要比较两个列表。 ls 输出是第一个列表,第二个是 ARQ02。

#!/bin/bash  

exec 3< <(ls /home/lint)

while read arq <&3; do
var=`grep -e "$arq" ARQ02`
if [ "$?" -ne 0 ] ; then
echo "$arq" >> result
fi
done

exec 3<&-

抱歉我的英语不好。

最佳答案

您的直接问题是您必须指示grep使用 -F 将搜索词解释为文字 而不是正则表达式选项:

var=$(grep -Fe "$arq" ARQ02)

这样,任何恰好出现在 ls /home/lint 输出中的正则表达式元字符- 例如 [] - 仍将被视为文字 并且不会破坏 grep调用。

也就是说,看起来您的命令可以简化,例如使用ls /home/lint 的输出直接作为一组搜索字符串传递给grep 立即,使用 -f选项:

grep -Ff <(ls /home/lint) ARQ02 > result

<(...)是所谓的process substitution ,简单地说,它将命令的输出呈现为(临时)文件,这就是 -f。期望:包含 grep 的搜索词的文件.


或者,如果:

  • ARQ02 包含完全ls /home/lint 输出中的(部分)文件名相匹配的文件名, 和

  • 您不介意排序或想对存储在result 中的匹配项进行排序,

考虑 HuStmpHrrr's helpful answer .

关于linux - 如何转义 ls 输出中的方括号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40252330/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com