我有输入(例如,来自ifconfig run0 scan
在 OpenBSD 上),它有一些用空格分隔的字段,但某些字段本身包含空格(幸运的是,包含空格的此类字段总是用引号引起来)。
我需要区分引号内的空格和分隔符空格。这个想法是用下划线替换引号内的空格。
样本数据:
%cat /tmp/ifconfig_scan | fgrep nwid | cut -f3
nwid Websense chan 6 bssid 00:22:7f:xx:xx:xx 59dB 54M short_preamble,short_slottime
nwid ZyXEL chan 8 bssid cc:5d:4e:xx:xx:xx 5dB 54M privacy,short_slottime
nwid "myTouch 4G Hotspot" chan 11 bssid d8:b3:77:xx:xx:xx 49dB 54M privacy,short_slottime
这最终没有按照我想要的方式处理,因为我还没有用下划线替换引号内的空格:
%cat /tmp/ifconfig_scan | fgrep nwid | cut -f3 |\
cut -s -d ' ' -f 2,4,6,7,8 | sort -n -k4
"myTouch Hotspot" 11 bssid d8:b3:77:xx:xx:xx
ZyXEL 8 cc:5d:4e:xx:xx:xx 5dB 54M
Websense 6 00:22:7f:xx:xx:xx 59dB 54M
For a sed
-唯一的解决方案(我不一定提倡),尝试:
echo 'a b "c d e" f g "h i"' |\
sed ':a;s/^\(\([^"]*"[^"]*"[^"]*\)*[^"]*"[^"]*\) /\1_/;ta'
a b "c_d_e" f g "h_i"
翻译:
- 从该行的开头开始。
- 寻找图案
junk"junk"
,重复零次或多次,其中junk
没有引号,后面是junk"junk space
.
- 将最后的空格替换为
_
.
- 如果成功,则跳回到开头。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)