小编Fad*_*ass的帖子

强制 Bash 使用 Perl RegEx 引擎

您可能已经知道,Bash RegEx 引擎不支持现代 RegEx 引擎支持的许多功能(反向引用、环视断言等)。以下是我刚刚创建的一个简单的 Bash 脚本,试图解释我的最终目标是什么:

#!/bin/bash

# Make sure exactly two arguments are passed.
if [ $# -lt 2 ]
then
    echo "Usage: match [string] [pattern]"
    return
fi

variable=${1}
pattern=${2}

if [[ ${variable} =~ ${pattern} ]]
then
    echo "true"
else
    echo "false"
fi
Run Code Online (Sandbox Code Playgroud)

因此,例如,类似以下命令的内容将返回 false:

. match.sh "catfish" "(?=catfish)fish"
Run Code Online (Sandbox Code Playgroud)

而完全相同的表达式在 Perl 或 JavaScript 正则表达式测试器中使用时会找到匹配项。

反向引用(例如 (expr1)(expr2)[ ]\1\2)也不会匹配。

我得出的结论是,只有强制 bash 使用与 Perl 兼容的 RegEx 引擎才能解决我的问题。这是可行的吗?如果是这样,我将如何执行该程序?

bash perl regular-expression

13
推荐指数
1
解决办法
2万
查看次数

优化“while”循环

我创建了一个迷你脚本,只需按一下按钮即可重新启动我的 Raspberry Pi。该脚本简单地使用wiringPi(gpio命令)将引脚0(Raspberry Pi标准编号顺序中的引脚17)设置为输入,然后读取该值直到为1(即按下或按住按钮时)。

这是我的脚本:

gpio mode 0 in

while (true)
do
        if [ `gpio read 0` -eq 1 ]
        then
                echo password | sudo -S reboot
                break
        fi
done &
Run Code Online (Sandbox Code Playgroud)

该脚本工作正常,一切正常。

然而,对于那些不熟悉 Pi 的人来说,它带有非常有限的硬件资源(包括 512 MB 的内存),很容易被我正在使用的循环消耗掉。

我在这里试图实现的是为 bash 找到另一种方法来找出值何时从0变为 ,1而不必为它专门提供一个更像是无条件循环的方法。这是可行的吗?请分享您的想法。

bash shell-script raspberry-pi

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

在“sed”中执行命令

我有一个保存在文本文件中的随机内存地址列表,我需要将sed它们取出,解码它们,然后将它们保存回我的文件。但是,我尝试执行的解码操作是在我前段时间创建的 C++ 程序中处理的。我现在遇到的问题是在sed命令中执行 C++ ;也就是说,我想反向引用需要解码的部分并将其用作我的 C++ 程序中的参数。我写了以下命令:

cat $1 | sed -r 's/(0[Xx])([0-9A-Za-z]{1,8})/\1`./convAddrs \2`/g';
Run Code Online (Sandbox Code Playgroud)

在我有机会阅读这篇文章中的答案之前,它说不sed执行命令。是真的sed不允许执行命令吗?如果是这样,假设我写的命令是一个有效的sed序列,我将如何写perl?

sed perl regular-expression

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