เมื่อฉันค้นหาแท็บในไฟล์ที่มี (จ) grep ฉันจะใช้แท็บครอก ( ^v + <tab>) ฉันไม่สามารถใช้\tแทนแท็บในนิพจน์ทั่วไปได้ ด้วยเช่น sed การแสดงออกนี้ทำงานได้ดีมาก
ดังนั้นจึงมีความเป็นไปได้ที่จะใช้การทดแทน<tab>ที่ไม่ได้มาจากที่\tใด
เมื่อฉันค้นหาแท็บในไฟล์ที่มี (จ) grep ฉันจะใช้แท็บครอก ( ^v + <tab>) ฉันไม่สามารถใช้\tแทนแท็บในนิพจน์ทั่วไปได้ ด้วยเช่น sed การแสดงออกนี้ทำงานได้ดีมาก
ดังนั้นจึงมีความเป็นไปได้ที่จะใช้การทดแทน<tab>ที่ไม่ได้มาจากที่\tใด
คำตอบ:
grep คือการใช้การแสดงออกปกติตามที่กำหนดโดยPOSIX ด้วยเหตุผลใดก็ตาม POSIX ไม่ได้กำหนด\tเป็นแท็บ
คุณมีทางเลือกหลายประการ:
บอก grep ให้ใช้นิพจน์ทั่วไปตามที่กำหนดโดย perl (perl มี\tตามแท็บ):
grep -P "\t" foo.txt
หน้าคนเตือนว่านี่เป็นคุณสมบัติ "ทดลอง" อย่างน้อย\tดูเหมือนว่าจะทำงานได้ดี แต่คุณสมบัติขั้นสูงเพิ่มเติม Perl อาจไม่
ใช้ printf เพื่อพิมพ์อักขระแท็บสำหรับคุณ:
grep "$(printf '\t')" foo.txtใช้อักขระแท็บตัวอักษร:
grep "^V<tab>" foo.txt
ที่อยู่: ชนิดgrep "จากนั้นกดปุ่มctrl+vจากนั้นกดปุ่มจากนั้นพิมพ์tab " foo.txtการกดctrl+vในเทอร์มินัลจะทำให้คีย์ถัดไปถูกใช้เป็นคำต่อคำ นั่นหมายถึงว่าเทอร์มินัลจะแทรกอักขระแท็บแทนที่จะเรียกใช้ฟังก์ชันบางอย่างที่ผูกไว้กับคีย์แท็บ
ใช้คุณสมบัติการอ้างอิง ansi cของ bash:
grep $'\t' foo.txt
สิ่งนี้ไม่สามารถใช้ได้กับทุกเชลล์
ใช้ awk:
awk '/\t/'ใช้ sed:
sed -n '/\t/p'ดูบทความวิกิพีเดียเกี่ยวกับการแสดงออกปกติสำหรับภาพรวมของการเรียนตัวละครที่กำหนดไว้ใน POSIX และระบบอื่น ๆ
grep $'\t' foo.txt(แต่ฉันมักจะเขียนfgrepแทนgrep)
grep "$(printf '\t')${myvar}" foo.txtผมใช้ มันใช้งานได้ดี ด้วยความพยายามสองสามครั้งฉันไม่สามารถรับแบบฟอร์มสุดท้ายให้ทำงานได้
grepไม่สามารถแปลความหมาย\tว่าเป็นแท็บได้อย่างเงียบ ๆ? POSIX ต้องการให้มีความ\tหมายว่าอย่างอื่นหรือไม่? บางทีมันควรจะตรงกับตัวอักษร\ ตามด้วยt?
This is highly experimental and grep -P may warn of unimplemented features.อาจไม่ควรใช้-Pในระบบดั้งเดิม printfทางเลือกที่ดีกว่า
มันไม่ได้เป็นคำตอบที่คุณต้องการจะได้ยินอย่างแน่นอน แต่มีการใช้งานลำดับการหลบหนีที่เป็นไปได้โดยการทุบตี
command | grep $'\t'
(อย่าใส่ลงในเครื่องหมายคำพูดคู่!)
grep $'\t'ๆ
awk '/\t/' เป็นวิธีแก้ปัญหาที่ฉันชอบ:
printf 'a\t\nb' | awk '/\t/'
ผลลัพธ์: a\t.
หนึ่งสามารถหันไปใช้รหัสฐานสิบหก ascii สำหรับแท็บ:
$ echo "one"$'\t'"two" > input.txt
$ grep -P "\x9" input.txt
one two
$ grep $'\x9' input.txt
one two