从Linux(raspbian)中的wpa_supplicant.conf中删除网络配置文件。

时间:2013-11-28 06:31:11

标签: linux sed awk debian raspberry-pi

我正在使用Raspbian,但这不是Pi特定的问题

我需要从我的C程序中删除 来自etc / wpa_supplicant / wpa_supplicant.conf的未使用的网络配置文件。

我的程序以root身份运行。

是否有针对此的shell命令?

我尝试使用grep,tr和sed的组合,但是我没有在那里完成。 白色空间也可能有所不同。

我需要为给定的ssid删除此块,忽略空格。

   network={
      ssid="MY_SSID_TO_DELETE"
      .........
   }

2 个答案:

答案 0 :(得分:2)

SSID_TO_DELETE="Put your ssid here"
sed -n "1 !H;1 h;$ {x;s/[[:space:]]*network={\n[[:space:]]*ssid=\"${SSID_TO_DELETE}\"[^}]*}//g;p;}" YourFile

在C中,可以直接在命令中生成您的SSID信息(将put_your_ssid_here替换为ssid的值)

sed '1 !H;1 h;$ {x;s/[[:space:]]*network={\n[[:space:]]*ssid="Put_your_ssid_here"[^}]*}//g;}' YourFile

以\ n代替的第一个代码段;

SSID_TO_DELETE="Put your ssid here"
    sed -n "1 !H
       1 h
       $ {
         x
         s/[[:space:]]*network={\n[[:space:]]*ssid=\"${SSID_TO_DELETE}\"[^}]*}//g
         p
         }" YourFile

原则(基于最后一个片段)

  • sed -n:读取时不打印行(除非代码中有特定请求)
  • 1!H和1小时将所有行加载到保持缓冲区中(因此所有文件都在内存中,默认逐行工作)
  • $表示最后一行到达时
  • x,将保持缓冲区(加载文件)加载到工作缓冲区(一个sed可以工作)
  • s / ...替换包含网络模式的文本部分,直到你的SSID在下一行之后没有任何东西(g:表示所有出现)
  • p打印最终结果

答案 1 :(得分:1)

试试这个

SSID_TO_DELETE=$1
    sudo sed -n "1 !H
       1 h
       $ {
         x
         s/[[:space:]]*network={\n[[:space:]]*ssid=\"${SSID_TO_DELETE}\"[^}]*}//g
         p
         }" /etc/wpa_supplicant/wpa_supplicant.conf > /etc/wpa_supplicant/wpa_supplicant.conf