為什麼正則表達式在 bash/ksh 中不起作用,而在命令行中運行良好

我想使用以下正則表達式排除任何以“.ses”結尾的文件或沒有擴展名的文件。它在命令行中運行良好,但在 shell (bash/ksh) 中不起作用。

正則表達式模式: "\.(?!ses\$)([^.]+\$)"

文件名示例:

"/test/path/test file with spaces.__1" (expected true)
"/test/path/test file with spaces.ses" (expected false)
"/test/path/test file with spaces" (expected false)
"/test/path/test file with spaces.txt" (expected true)
FILE_NAME="/test/path/test file with spaces.__1"

PATTERN_STR="\.(?!ses\$)([^.]+\$)"

if [[ "${FILE_NAME}" =~ ${PATTERN_STR} ]]; then

        Match_Result="true"
else

        Match_Result="false"

fi

echo $Match_Result

它在外殼中返回“真”但“假”。有誰知道為什麼?

維克托·斯特里比尤夫

您可以顛倒邏輯並使所有包含.ses在末尾或在最後一個/.之後不包含點的字符串失敗

然後,您可以使用此腳本

#!/bin/bash
declare -a arr=("/test/path/test file with spaces.__1"
"/test/path/test file with spaces.ses"
"/test/path/test file with spaces"
"/test/path/test file with spaces.txt")
# true false false true
PATTERN_STR='(/[^/.]+|\.ses)$'
for FILE_NAME in "${arr[@]}"; do
  if [[ "$FILE_NAME" =~ $PATTERN_STR ]]; then
    Match_Result="false"
  else
    Match_Result="true"
  fi
  echo $Match_Result
done;

輸出:

true
false
false
true

詳情

  • ( - 開始一個捕獲組:
    • /[^/.]+-/然後是除/and之外的一個或多個字符.
  • | - 或者
    • \.ses —— .ses
  • ) - 分組結束
  • $ - 字符串的結尾。

使用shopt -s nocasematch/啟用不區分大小寫的版本shopt -u nocasematch(請參閱Bash 中的不區分大小寫的正則表達式)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

為什麼在正則表達式中需要 (?(R)...|...) if 條件?

為什麼這個正則表達式返回字符而不是換行符

React Native:為什麼有效的 Javascript 正則表達式模式在 Android 上不起作用?

為什麼我的正則表達式命令無法正確替換字符串?

為什麼將雙反斜杠 (\\) 添加到正則表達式模式中

為什麼我不能在正則表達式 Java 中重複一組?

這個正則表達式在 Entrypoint.sh 中做什麼?

為什麼帶有運算符 AND 的表達式在 css 選擇器中不起作用

為什麼正則表達式不匹配?

為什麼表達式的順序在 re.match 中很重要?

我如何在 flutter/dart 中為 Unicode 塊進行正則表達式?

獲取括號中的單詞作為組正則表達式

如何在 SQL Server 中為特定組合做正則表達式模式

為什麼這個簡單的 ruby 代碼在命令行中不起作用,但在將其粘貼到 irb 中時起作用

將所有正則表達式匹配項作為新行返回

為什麼我的代碼需要大括號之前的 switch case 中的主要表達式?

%||% 表達式在 R 中有什麼作用

為什麼此正則表達式需要捕獲組才能匹配?

以下部分的正則表達式是什麼?

我可以在 CSS 中為選擇器使用變量或正則表達式嗎?

為什麼使用正則表達式 ^[az]$ 的 find() 不等同於使用正則表達式 [az] 的matches()?

在 Python 中匹配 arxiv 正則表達式

正則表達式匹配python中引用的句子

在 curl 中禁用正則表達式解析

php中的正則表達式不包括值

忽略正則表達式中不相關的部分

如果在正則表達式中?

正則表達式 ”。{}。” 在 Python 列表理解中

Lua 中的重複正則表達式