小编pau*_*ith的帖子

如何循环遍历unix shell脚本中与正则表达式匹配的文件

我希望能够循环遍历与特定模式匹配的文件列表.我可以让unix使用带有正则表达式的ls和egrep列出这些文件,但我找不到将其转换为迭代过程的方法.我怀疑使用ls不是答案.我们将非常感激地提供任何帮助.

我当前的ls命令如下所示:

ls | egrep -i 'MYFILE[0-9][0-9]([0][1-9]|1[0-2])([0][1-9]|[12][0-9]|[3][01]).dat'
Run Code Online (Sandbox Code Playgroud)

我希望上面的内容匹配:

  • MYFILE160418.dat
  • myFILE170312.DAT
  • MyFiLe160416.DaT

但不是:

  • MYOTHERFILE150202.DAT
  • MYFILE.DAT
  • myfile.csv

谢谢,

保罗.

regex unix bash shell

6
推荐指数
2
解决办法
7117
查看次数

如何在 bash shell 的 if 语句中使用 ls 命令的输出

在继续处理该文件之前,我想检查是否只有一个文件实例存在。

我可以使用以下命令检查存在多少个实例:

ls -l $INPUT_DIR/${INPUT_FILE_PREFIX}cons*.csv.gz | wc -l;
Run Code Online (Sandbox Code Playgroud)

但是,当我在 if 语句中使用它时,会警告我ls: command not found.

if [ls -l $INPUT_DIR/${INPUT_FILE_PREFIX}cons*.csv.gz | wc -l = '1']
 then
 echo "Only 1 File Exists";
fi
Run Code Online (Sandbox Code Playgroud)

我尝试在 ls 命令的末尾添加一个分号并将其括在方括号中 - 这些都没有产生任何结果。

我很少需要编写任何 Shell 脚本,我怀疑这是一个非常基本的错误,因此非常感谢任何帮助。

bash shell

3
推荐指数
1
解决办法
5434
查看次数

当命令使用EOF变量时,删除BASH中命令的输出

作为我的bash shell脚本的一部分,我运行以下代码:

sql -umyuser mydb <<-EOSQL 
MODIFY $MYTABLECLEAR TO TRUNCATED;\g
EOSQL
Run Code Online (Sandbox Code Playgroud)

这很好用,但我在终端窗口输出,我想避免.通常我只是>/dev/null在命令的末尾添加一个语句,我想要抑制输出,但是如果不搞砸EOSQL文本块,我就不能这样做.

我尝试过以下内容:

`sql -umyuser mydb <<-EOSQL 
MODIFY $MYTABLECLEAR TO TRUNCATED;\g
EOSQL` >/dev/null
Run Code Online (Sandbox Code Playgroud)

但是在这里我在终端窗口收到一条消息说TERMINAL: command not found.

有趣的是,尽管有这条消息,sql命令仍然运行.

任何帮助将非常感激.

谢谢,

保罗.

linux bash shell

1
推荐指数
1
解决办法
74
查看次数

标签 统计

bash ×3

shell ×3

linux ×1

regex ×1

unix ×1