จะพิมพ์อักขระตัวแรกในคอลัมน์ที่สองได้อย่างไร


3

ใช้ egrep วิธีการที่ฉันสามารถพิมพ์ทุกบรรทัดที่ชื่อสุดท้ายเริ่มต้นด้วยKหรือk?

Jennifer Cowan:548-834-2348:583 Laurel Ave., Kingsville, TX 83745:10/1/35:58900
Lesley Kirstin:408-456-1234:4 Harvard Square, Boston, MA 02133:4/22/62:52600
Jennifer Cowan:548-834-2348:583 Laurel Ave., kingsville, TX 83745:10/1/35:58900
Lesley kirstin:408-456-1234:4 Harvard Square, Boston, MA 02133:4/22/62:52600
William Kopf:846-836-2837:6937 Ware Road, Milton, PA 93756:9/21/46:43500
Arthur Putie:923-835-8745:23 Wimp Lane, Kensington, DL 38758:8/31/69:126000

คำตอบ:


3

ความพยายามครั้งแรกจะเป็น

  grep '^[^ ]*  *[Kk]'

แต่สมมติว่ามีชื่อหนึ่งเสมอและไม่มีชื่อย่อ
ในตัวอย่างนี้คุณสามารถใช้-iตัวเลือกและแทนที่[Kk]ด้วยเพียงk

มันอาจจะดีกว่าถ้าให้ยึดกับโคลอนแรก

  grep -i ' k[^:]*:'

หากคุณต้องการพิมพ์เฉพาะนามสกุลจริง ๆ และไม่ใช่ทั้งบรรทัดคุณควรพิจารณาใช้ awk (หรือ perl)


ปรับปรุง: ริวิธีการแสดงออก grep แรกที่'^[^ ]* *[Kk]'ถูกสร้าง

  '     apostrophe delimits a parameter that contains spaces
        and other so-called meta-characters that the shell might alter
  ^     caret means start of line
  [     brackets mark a set of characters, any one of which is to be matched
  ^     inside brackets means negation or 'none of the following'
        so `[^ ]` means "not a space"
  ]     is the end of the set.
  *     means 0,1 or more of the prior character
        so `[^ ]*` means any contiguous group of characters that does not 
        contain a space
  then we have two spaces
  *     means 0,1 or more of the prior character
        so space space * means 1 nor more spaces.
  [Kk]  means `K` or `k`
  [^:]* means 0,1 or more characters that are not a colon
  :     followed by a colon

ว้าวคำสั่งแรกใช้งานได้ดีมาก แต่โปรดอธิบายโดยละเอียด ขอบคุณมาก.
Steve

@Steve: ดูคำตอบที่อัปเดต คุณสามารถค้นหาเนื้อหาเพิ่มเติมได้ในmanหน้าเว็บและแบบฝึกหัดบนเว็บ หากคำตอบนั้นมีประโยชน์โปรดลงคะแนน
RedGrittyBrick

0
perl -aF/:/ -ne 'print if $F[0] =~ /\s[Kk]\S+$/'
  • ด้วย-aF/:/บรรทัดทั้งหมดจะถูกแบ่งออกเป็นฟิลด์ที่คั่นด้วยโคลอน
  • $F[0] เป็นเขต zeroth และมีชื่อ
  • /\s[Kk]\S+$/จับคู่เว้นวรรค ( \s) ตามด้วยKหรือkตามด้วยอักขระที่ไม่ใช่ช่องว่างจำนวนใด ๆ ( \S+) จนกระทั่งถึงจุดสิ้นสุดของฟิลด์ ( $)
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.