一行 shell 命令查找模式文件名

one line shell command to find a pattern filename

在封闭的应用程序中,我必须在变量 ($text) 中捕获一个字符串,例如:

A00_ABC_OK

,我必须像这样过滤单个文件:

XA00_ABC

其中 X 可以是任何字符。

在这个封闭的应用程序上,我只能输入一行 shell 命令,而脚本不起作用。我尝试了这些不同的命令,但没有人能正常工作

echo $text | sed 's/_OK//;s/^/*/' | xargs ls

A00_ABC_OK -> *A00_ABC -> ls *A00_ABC = 不工作

echo $text | sed 's/_OK//;s/^/*/' | xargs find -name

A00_ABC_OK -> *A00_ABC -> find -name *A00_ABC = 不工作

ls -1 | grep < echo $text | sed 's/_OK//;'

ls -1 -> grep A00_ABC

我正在使用带有 Linux CentOS

的服务器

谢谢!

另一种方法

$ ls *A00_ABC
gA00_ABC  xA00_ABC
$ text="A00_ABC_OK"
$ ls $(echo $text | sed 's/_OK//;s/^/*/')
gA00_ABC  xA00_ABC
$

echo $text | sed 's/_OK//;s/^/*/' | xargs -I % find . -name % 也有效

通配符由 shell 扩展,但 xargs 在添加来自其标准输入的参数后不使用 shell 来执行命令。

您可以直接将通配符放入命令中,而不是将通配符放入变量中。您可以使用 shell 的内置参数扩展替换运算符从值中删除 _OK

ls *"${text/_OK/}"