Bash - 检查文件路径中的字符串

时间:2015-11-30 22:56:15

标签: bash jenkins filepath slash

如何在bash中检查文件路径中的字符串?我在尝试:

if [[$(echo "${filePathVar}" | sed 's#//#:#g#') == *"File.java"* ]]

用路径中的冒号(:)替换所有正斜杠。它不起作用。 Bash将文件路径字符串视为文件路径,并抛出错误“No such file or directory”。目的是让它将文件路径视为字符串。

示例:filePathVar可能是

  

** / myloc / SRC / File.java

在这种情况下,检查应该返回true。

请注意,我将此脚本作为构建步骤在Jenkins作业中编写。

Updates as of 12/15/15

以下内容返回Not found,这是错误的。

#!/bin/bash
sources="**/src/TESTS/A.java **/src/TESTS/B.java"

if [[ "${sources}" = ~B.java[^/]*$ ]];
then
echo "Found!!"
else
echo "Not Found!!"
fi

以下内容返回Found,这也是错误的(删除了比较器=周围的空间)。

#!/bin/bash
sources="**/src/TESTS/A.java **/src/TESTS/C.java"

if [[ "${sources}"=~B.java[^/]*$ ]];
then
echo "Found!!"
else
echo "Not Found!!"
fi

比较操作显然无效。

2 个答案:

答案 0 :(得分:2)

使用bash的内置正则表达式匹配工具更容易:

$ filePathVar=/myLoc/src/File.java
if [[ "$filePathVar" =~ File.java[^/]*$ ]]; then echo Match; else echo No Match; fi
Match

[[...]]内,运算符=~执行正则表达式匹配。正则表达式File.java[^/]*匹配包含File.java的任何字符串,可选地后跟除/之外的任何内容。

答案 1 :(得分:1)

它的工作方式如下:

                   date1               date2 id row_name matching_row_name
  1: 2012-01-01 18:01:58 2012-01-02 06:36:13  b        1   NA