Tôi biết awk
có thể làm thay text/chuỗi với sub()
và gsub()
như:Ai đó có thể giải thích cho tôi tại sao sub()/gsub() của awk hoạt động như thế này?
kent$ echo "fffff"|awk '{gsub("f", "b")}1'
bbbbb
hoặc
kent$ echo "fffff"|awk '{gsub(/f/, "b")}1'
bbbbb
Tuy nhiên hôm nay tôi đã phạm sai lầm typo, tôi đã viết những dòng như:
kent$ echo "fffff"|awk '{gsub('f', "b")}1'
Nhưng awk
không phàn nàn về điều đó nhưng được tạo ra như thường lệ, tất nhiên, đầu ra bất ngờ, nó đã cho tôi đôi khi để tìm ra lỗi. Sản lượng awk
đã cho tôi là:
bfbfbfbfbfb
một ví dụ khác:
kent$ echo "fafafafafXX"|awk '{gsub('fa', "B")}1'
BfBaBfBaBfBaBfBaBfBXBXB
ví dụ với sub()
là lạ quá:
kent$ echo "thanks in advance"|awk '{sub('a', "B")}1'
Bthanks in advance
Có thể ai đó giải thích cho tôi như thế nào đã được thay thế lạ thực hiện?
kent$ awk --version
GNU Awk 4.0.2
EDIT
cảm ơn cho câu trả lời từ Joni. có lẽ ví dụ này giải thích nó tốt hơn, tôi chỉ cần thêm nó ở đây:
kent$ echo "thanks in advance"|awk '{f="k";sub('f', "B")}1'
thanBs in advance
kent$ echo "thanks in advance"|awk '{sub('th ank', "B")}1'
awk: cmd. line:2: {sub(th
awk: cmd. line:2: ^unexpected newline or end of string
+1, âm thanh hợp lý. – Kent
Tôi nghĩ rằng đây có thể là một mẹo để được sử dụng, ngay cả khi nó là một chút nguy hiểm. :) – Kent