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

时间:2016-01-23 02:01:56

标签: c++ linux bash shell sed

目前,我正在尝试将我的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 ++中的哪个命令做同样的事情。

1 个答案:

答案 0 :(得分:1)

sed读取它的输入(在你的例子中是$BTMAC中被回显的字符串),并根据传递给它的表达式,用其他东西替换输入数据的某些部分(同样根据表达式)并将结果写入stdout或输出文件(在您的情况下:/data/.bt.info文件)

例如:

$ sed 's/replaceThis/WithThis/'

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

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

现在,在C ++ 11中,我们可以使用regex库,我猜应该使用它。如果你不能使用C ++ 11的东西,你应该找到其他提供像Qt这样的正则表达式的库。

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