C++ 中的 Bash 脚本中是否有诸如 "sed" 之类的命令?
Is there a command such as "sed" in Bash scripts in C++?
目前,我正在尝试将我的 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()
搜索并手动替换。
相关文章:
- 从命令行c++发送文本文件名
- 如何使用 < 和 > 命令获取 c++ 中的输入和输出?
- 为cl.exe(Visual Studio代码)指定命令行C++版本
- 如何在OMNET++中指定与命令行参数组合的输出文件名
- 使用QProcess执行命令,并将结果存储在QStringList中
- 数组长度,为什么从命令行获取时不能使用它?
- 如果用户输入无效,如何使用字符串变量-C++重复输入命令
- clang整洁10忽略了我的NOLINT命令
- 在子目录中使用target_sources()命令时用于单元测试(qtest)的项目结构
- 如何处理linux终端中带有负号(-)的C++中的命令行参数
- VS Code "command":"make"与终端窗口中的命令行"make"不同
- 使用VS Code和CMake Tools运行自定义命令
- 如何使用ESP8266向谷歌主页发送命令
- 如何使 windows 命令提示符在C++可执行文件上显示返回值?
- 未定义的引用 .. 使用 OpenCV 编译 C++ 代码时,从命令行
- 通过 Openssl 命令行加密,通过 c++ 解密
- CMake "--target install"无需"--build"命令行
- C++ 中的 Bash 脚本中是否有诸如 "sed" 之类的命令?
- 使用sed命令包装字符串
- 使用正则表达式和 sed 命令替换C++代码中的' *'指针不起作用