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 []
Saya ingin mendapatkan kolom pertama di atas tetapi tangkapannya adalah, saya perlu memperlakukan \
(spasi garis miring terbalik) sebagai bagian dari kolom, jadi awk '{print $1}'
harus memberi saya
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
text-processing
awk
sed
GypsyCosmonaut
sumber
sumber
\
spesial? Misalnya, apakaha\\ b
satu atau dua bidang?[[:space:]]
dengan\[[:space:]]
, data asli telah \ belum tersentuh di tempat mereka. Setelah mendapatkan data asli di kolom pertama dibatasi hanya oleh spasi dan tidak\[[:space:]]
, saya akan mengganti\[[:space:]]
dengan[[:space:]]
dan saya akan kembali dengan data asli kembali yang memiliki \.Jawaban:
dengan gnu awk (
gawk
) Anda dapat menggunakan beberapa pernyataan nol panjang seperti\<
atau\>
:tapi sayangnya bukan yang full-blown dari
perl
ataupcre
(misalnya.(?<!\\)
,(?<=\w)
, dll):sumber
Anda dapat mengganti \ space dengan sesuatu yang lain dan kembali lagi sesudahnya.
sumber
\034
:awk '{gsub(/\\ /,SUBSEP,$0); val=$1; gsub(SUBSEP,"\\ ",val); print val}' file
Dengan GNU
grep
atau yang kompatibel:Atau dengan ERE:
Itu memperlakukan
\
sebagai operator mengutip, untuk spasi putih sebagai pembatas, tetapi juga untuk dirinya sendiri. Artinya, padafoo\\ bar
input, ia kembalifoo\\
.sumber
Hanya dengan
sed
:Atau lebih pendek:
Ini
(([^\]*\\ ){1,})?[^ ]*
cocok:[^\]*\\
: apa pun yang bukan back-slash yang diakhiri dengan back-slash diikuti oleh spasi (perhatikan bahwa\
di dalam kelas karakter tidak diperlukan untuk melarikan diri, tetapi di luar tidak).([^\]*\\ ){1,}
: cocok di atas dengan satu atau lebih kali kejadian.(([^\]*\\ ){1,})?
: ini opsional saat menggunakan(...)?
; kita bisa menggunakan([^\]*\\ ){0,}
juga atau([^\]*\\ )*
.((([^\]*\\ ){1,})?[^ ]*)
: pertandingan di atas yang bersifat opsional diikuti oleh apa pun yang bukan spasi dan tahan sebagai pertandingan grup dengan\1
sebagai referensi belakang.((([^\]*\\ ){1,})?[^ ]*).*
: cocok di atas(...)
dan yang lainnya.*
.maka bagian pengganti hanya cetak
\1
yang merupakan output:sumber