2013-11-28 77 views
0

我runnining Raspbian,但这不是一个丕具体问题从Linux(raspbian)的wpa_supplicant.conf中删除网络配置文件。

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

我的程序以root身份运行。

有没有shell命令?

我尝试过使用grep,tr和sed的组合,但是我没有那么做。 此外,白色空间可能会有所不同。

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

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

你可以用'sed'完成它;但同意,这应该是一个实用程序。 – tripleee

回答

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)

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

第一片段与\ n的地方的直接产生的SSID信息

;

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小时和1小时负载的所有! (所以所有文件都在内存中,sed默认一行一行地工作)
  • $最后一行到达时的平均值
  • x,将加载缓冲区(加载文件)加载到工作缓冲区(一个sed可以工作)
  • S/...替换下一行的SSID号后一无所获包含您的网络模式,直到第一}文本部分(G:对所有occurence)
  • P打印最终结果
+0

嗨,我尝试了上面的第一个代码片段,我得到这个消息'-bash:!H:event not found' –

+0

第二个代码片段'sort-of'起作用。删除之前和之后的文件内容,都在屏幕上打印。如果我们只能得到后者(删除版本)来打印,那将是完美的! –

+0

尝试sed -n并在最后更改g;}以g; p;}。在这段代码中,我更改并在sed – NeronLeVelu

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