C++ 中的 Bash 脚本中是否有诸如 "sed" 之类的命令?

Is there a command such as "sed" in Bash scripts in C++?

本文关键字:sed 命令 Bash 中的 脚本 是否 C++      更新时间:2023-10-16

目前,我正在尝试将我的 Bash 脚本转换为C++可执行文件,但我坚持使用 sed 命令。

这是我的 Bash 脚本:

unset WIFIMAC
unset BTMAC
# Skip processing if MAC addresses are already written
if [ -f /data/.mac.info -a -f /data/.bt.info ]; then
    echo "MAC addresses already found."
fi
# Wait until Samsung's RIL announces MAC addresses
until [ $(expr length "$WIFIMAC") == 17 ]; do
    WIFIMAC=`getprop ril.wifi_macaddr`
    sleep 1
done
until [ $(expr length "$BTMAC") == 12 ]; do
    BTMAC=`getprop ril.bt_macaddr`
    sleep 1
done
# Set WiFi MAC address
echo $WIFIMAC >/data/.mac.info
# Convert BT MAC address to proper format
echo $BTMAC | sed 's!^M$!!;s!-!!g;s!.!!g;s!(..)!1:!g;s!:$!!' >/data/.bt.info
exit

在这里,我尝试将其转换为C++(我在 Bash 命令旁边放置了注释):

# This script will read the MAC addresses from Samsung's RIL.
unset WIFIMAC    --->      char wifimac....
unset BTMAC      --->      char btmac...
# Skip processing if MAC addresses are already written
if [ -f /data/.mac.info -a -f /data/.bt.info ]; then    ----> create file_exist(); function with fd = open... and put a smiply if return block
    echo "MAC addresses already found."
fi
# Wait until Samsung's RIL announces MAC addresses
until [ $(expr length "$WIFIMAC") == 17 ]; do           -----> while strlen(wifimac) == 17 blah blah blah....
    WIFIMAC=`getprop ril.wifi_macaddr`              -----> property_get function in cutils.h 
    sleep 1                                         -----> mdelay(1) if ım not wrong huh?.....
done
until [ $(expr length "$BTMAC") == 12 ]; do
    BTMAC=`getprop ril.bt_macaddr`                  -----> SAME COMMANDS ABOVE
    sleep 1
done
# Set WiFi MAC address
echo $WIFIMAC >/data/.mac.info                          -----> create write_string_to_path(); function with write(fd, ...)
# Convert BT MAC address to proper format
echo $BTMAC | sed 's!^M$!!;s!-!!g;s!.!!g;s!(..)!1:!g;s!:$!!' >/data/.bt.info -----> ********HERE İS THE COMMAND "sed" *********
exit

我对 sed 略知一二,但我不知道它在这里做什么,因此我不知道C++中的哪个命令做同样的事情。

sed读取

其输入(在您的示例中,$BTMAC 中的字符串被回显),并根据传递给它的表达式,将输入数据的某些部分替换为其他内容(再次根据表达式)并将结果写入 stdout 或输出文件(在您的情况下:/data/.bt.info 文件)

例如:

$ sed 's/replaceThis/WithThis/'

在其输入数据中将单词 replaceThis 替换为单词 WithThis 并输出结果。虽然上述两个字符串都可以是正则表达式。

如果您不熟悉它,则必须阅读手册以首先了解 sed 命令中发生了什么。 这里没有人会为你做这件事。

现在,在 C++11 中,我们有你可以使用的正则表达式库,我想应该使用。如果你不能使用C++11的东西,你应该寻找其他提供正则表达式工作的库,如Qt。

因此,在 C++11 的正则表达式库中,您可以使用regex_replace()函数,或使用regex_search()搜索并手动替换。