Gyp*_*aut 8 sed awk text-processing
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 []
Run Code Online (Sandbox Code Playgroud)
我想得到上面的第一列,但问题是,我需要将\ (反斜杠空格)作为列的一部分,所以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
Run Code Online (Sandbox Code Playgroud)
使用 gnu awk ( gawk) 您可以使用一些零长度断言,例如\<或\>:
$ echo 'a\ b c' | gawk 'BEGIN{FS="\\> +"} {print $1}'
a\ b
Run Code Online (Sandbox Code Playgroud)
但遗憾的是没有完全成熟的人从perl或pcre(如(?<!\\),(?<=\w)等):
$ echo 'a\ b, c' | perl -nle '@a=split /(?<!\\)\s+/, $_; print $a[0]'
a\ b,
Run Code Online (Sandbox Code Playgroud)
你可以用其他东西代替 \space ,然后再回来。
sed 's/\\ /\\x20/g' data_file | awk '{ print $1; }' | sed 's/\\x20/\\ /g'
Run Code Online (Sandbox Code Playgroud)
使用 GNUgrep或兼容:
grep -Po '^(\\.|\S)*'
Run Code Online (Sandbox Code Playgroud)
或使用 ERE:
grep -Eo '^(\\.|[^\[:space:]])*'
Run Code Online (Sandbox Code Playgroud)
这将\视为引用运算符,将空格视为分隔符,但也视为其自身。也就是说,在foo\\ bar输入时,它返回foo\\。