gpt4 book ai didi

Linux从文件中取出字符串并将其用作文件名?

转载 作者:太空宇宙 更新时间:2023-11-04 05:04:32 25 4
gpt4 key购买 nike

我正在编写脚本,但在某个时刻卡住了。

文件 1:此行位于其他文件中

#!/bin/sh

sh ~/.test/Folder-Name/.filetest &

文件 2: 在这个文件中,我想 grep ~/.test/Folder-Name/.filetest 这个文件的位置。它包括连字符、点、斜杠。我尝试使用 sed 和 grep 以及许多正则表达式,但不幸的是它对我不起作用。例如

SelectedFile=`cat Anotherfile.txt | grep -Rril '~\/\.conky\/[A-Z-a-z]\/\.conkyrc' > ~/abc`

最佳答案

您的正则表达式不太完整:

'~\/\.conky\/[A-Z-a-z]\/\.conkyrc'
^^^^^^^^^

在标记的位置,您要求输入单个字符。您想要的是许多这样的角色:

'~\/\.conky\/[A-Z-a-z]*\/\.conkyrc'
^

添加了一个*!

<小时/>

另请注意,您不需要转义 /:

'~/\.conky/[A-Z-a-z]*/\.conkyrc'

此外,根据可能的模式,您还可以匹配任何非空白字符,而不仅仅是 A-Z-a-z:

'~/\.conky/[^ ]*/\.conkyrc'
<小时/>

请注意,您正在以非常多余且不正确的方式调用 grep。首先,而不是:

cat X | grep Y

你可以简单地做:

grep Y X

其次,您为 grep 提供的一些选项是不必要的或错误的。例如,-R(以及冗余的-r)表示递归搜索。但你不是在搜索目录!第二个 -i 表示搜索不区分大小写,这可能是多余的,因为模式已经具有正确的大小写。第三,您给它 -l ,这意味着“给出具有模式的文件”,而不是“与模式匹配的行”。

关于后者,您可能实际上想要文件名,没关系,但是可以肯定的是您不应该在 grep 中通过管道传输文件,而是直接给它名称,以便它可以知道它!

简而言之,试试这个:

grep -l '~/\.conky/[^ ]*/\.conkyrc' AnotherFile.txt

如果您想将其写入另一个文件,请添加重定向:

grep ... > some_file

但是如果您想将输出保留在变量中,不要重定向它,否则您会丢失它!所以:

SelectedFile=$(grep -l '~/\.conky/[^ ]*/\.conkyrc' AnotherFile.txt)

顺便说一句,如果您打算搜索该文件(不知道它在 AnotherFile.txt 中,否则搜索相当愚蠢),您可以在目录上进行递归搜索:

grep -rl '~/\.conky/[^ ]*/\.conkyrc' SomeDirectory > ~/abc

关于Linux从文件中取出字符串并将其用作文件名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20525868/

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