我目前正在制作一个命令,从iwconfig获取信息,grep是某一行,削减一部分,然后运行两个sed搜索和替换函数,以便我可以将其输出管道输出到其他地方。该命令目前如下:
iwconfig wlan0 | grep ESSID | cut -c32-50 | sed 's/ //g' | sed 's/"//g'
输出按预期显示,删除空格和"但我想知道是否有办法压缩我的搜索并替换为单个命令,最好是使用和/或运算符。有没有办法做到这一点?如果是这样,sed命令将如何写入?谢谢!
答案 0 :(得分:3)
您还没有显示iwconfig
在您的案例中产生的内容,但是,在我的系统上,以下内容成功提取了ESSID:
iwconfig wlan0 | sed -n 's/.*ESSID://p'
如果确实需要删除空格和引号,请尝试:
iwconfig wlan0 | sed -n 's/[ "]//g; s/.*ESSID://p'
-n
这告诉sed不要打印任何行,除非我们明确要求它。
s/[ "]//g
这会删除空格和双引号。
s/.*ESSID://p
这会删除ESSID:
之前的所有内容。如果进行了替换,意味着此行包含ESSID:
,则将其打印出来。
$ echo '"something" ESSID:"my id"' | sed -n 's/[ "]//g; s/.*ESSID://p'
myid
答案 1 :(得分:1)
regexp1 \ | regexp2 匹配regexp1或regexp2。使用括号来使用复杂的替代正则表达式。匹配过程依次从左到右尝试每个替代,并使用成功的第一个替代。它是GNU扩展。
sed 's/ \|"//g'
应该有效
答案 2 :(得分:0)
使用GNU awk for gensub():
iwconfig wlan0 | awk '/ESSID/{print gensub(/[ "]/,"","g",substr($0,32,19))}'
可能有一个更简单的方法,但没有样本输入/输出(即iwconfig
的输出以及您希望脚本输出的内容)我不会猜测...