5678 []
testing,\ group []
[testing []
ip\ 5.6.7.8 []
launch-wizard-1 0.0.0.0/0
456dlkjfa []
1.2.3.4 []
test 1.2.3.4/32 4.3.2.0/23 4.3.2.0/23
default 4.3.2.0/23 4.3.2.0/23
launch-wizard-2 0.0.0.0/0
launch-wizard-3 0.0.0.0/0
2.3.4.5/32 []
我想得到上面的第一列,但问题是,我需要将\
(反斜杠空格)视为列的一部分,所以awk '{print $1}'
应该给我
5678
testing,\ group
[testing
ip\ 5.6.7.8
launch-wizard-1
456dlkjfa
1.2.3.4
test
default
launch-wizard-2
launch-wizard-3
2.3.4.5/32
使用 gnu awk (
gawk
) 您可以使用一些零长度断言,例如\<
or\>
:但不幸的是,不是来自
perl
or的成熟版本pcre
(例如(?<!\\)
,(?<=\w)
等):您可以将 \space 替换为其他内容,然后再返回。
使用 GNU
grep
或兼容:或使用 ERE:
将
\
其视为引用运算符,将空格视为分隔符,但也将其视为自己。也就是说,在foo\\ bar
输入时,它返回foo\\
.只需
sed
:或更短:
这
(([^\]*\\ ){1,})?[^ ]*
匹配:[^\]*\\
: 任何不是以反斜杠后跟空格结尾的反斜杠的东西(请注意,\
内部字符类不需要转义,但外部需要转义)。([^\]*\\ ){1,}
: 匹配上面出现的一次或多次。(([^\]*\\ ){1,})?
: 使用时这是可选的(...)?
;我们也可以使用([^\]*\\ ){0,}
or([^\]*\\ )*
。((([^\]*\\ ){1,})?[^ ]*)
: 匹配上面是可选的,后跟任何不是空格并作为组匹配\1
作为其反向引用的内容。((([^\]*\\ ){1,})?[^ ]*).*
: 匹配上面(...)
和其他任何东西.*
。然后是替换部分,只需打印
\1
输出: