如何在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
比较操作显然无效。
答案 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