วิธีแก้ไขเอาต์พุตในไพพ์ไลน์คำสั่ง bash


10

ตัวอย่างเช่นฉันได้รับคำสั่งจากบางบรรทัด

$ some-command
John
Bob
Lucy

ตอนนี้ฉันต้องการเพิ่มคำสั่ง chaining ที่แก้ไขเอาต์พุต

$ some-command | other-command
Hi John Bye
Hi Bob Bye
Hi Lucy Bye

จะเขียนยังother-commandไงดี? (ฉันเป็นสามเณรในทุบตี)

คำตอบ:


16

awk

$ some-command | awk '{print "Hi "$1" Bye"}'

sed

$ some-command | sed 's/\(.*\)/Hi \1 Bye/'

ตัวอย่าง

การใช้awk:

$ echo -e "John\nBob\nLucy" | awk '{print "Hi "$1" Bye"}'
Hi John Bye
Hi Bob Bye
Hi Lucy Bye

การใช้sed:

$ echo -e "John\nBob\nLucy" | sed 's/\(.*\)/Hi \1 Bye/'
Hi John Bye
Hi Bob Bye
Hi Lucy Bye

คุณลืมsome-command | paste -d\ <(printf '%s\n' Hi Hi Hi) - <(printf '%s\n' why Why WHY??)
kojiro

@kojiro - ไม่รู้สึกถึงpasteวันนี้ขอบคุณ 8-)
slm

5

โค้ดข้างล่างนี้อ่านหลายบรรทัด, LINEเก็บไว้ในตัวแปร ภายในลูปแต่ละบรรทัดจะถูกเขียนกลับไปที่เอาต์พุตมาตรฐานด้วยการเพิ่ม "Hi" และ "Bye"

#!/bin/bash

while read LINE ; do
   echo "Hi $LINE Bye"  
done

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.