regex - 检查 while 循环(shell)内的正则表达式条件

标签 regex shell loops if-statement while-loop

我在运行我的简单 shell 脚本时遇到问题,我在其中使用 while 循环读取文本文件并尝试使用匹配的正则表达式检查条件:

#!/bin/sh
regex="^sometext"


cat input.txt | 
{
  while read string
    do if [[ $string ~= $regex ]]; then
            echo "$string" | awk '{print $1}' >> output.txt
       else
            echo "$string" >> outfile.txt
       fi
    done
}

但我只收到类似

的错误
[[: not found

你能告诉我吗?

最佳答案

[[ expr ]] 是 bash 主义; sh 没有。

如果您想使用该语法,请使用 #!/bin/bash


也就是说,为什么要使用 shell 脚本?

Awk 已经可以做你在这里做的一切——你只需要利用 Awk 的内置正则表达式匹配和每行有多个操作的能力:

您的原始脚本可以简化为此命令:

awk '/^sometext/ {print $1; next} {print}' input.txt >> output.txt

如果模式匹配,Awk 将运行第一个 {} block ,它执行 print $1,然后强制 Awk 移动到下一行。否则,它将继续到第二个 {} block ,它只打印该行。

关于regex - 检查 while 循环(shell)内的正则表达式条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19689927/

相关文章:

JavaScript 拆分正则表达式保留分隔符

Java不会执行cmd行?

bash - 在第一行之后停止读取行循环时的Shell脚本

javascript - 访问嵌套对象 (JS) 中的信息

java - 我在 hashmap 上的 for 循环出错

ruby-on-rails - 非序列数据的正则表达式密码验证

c++ - 如何获取字符串中所有发现的 boost::regex 模式的位置?

javascript - 带有对象、数组的转换器通过函数传递变量

c++ - 返回字符串中模式的所有非重叠匹配项

shell - HDFS 命令行追加