ฉันได้แยกเอาต์พุตจากid
เพื่อจัดเตรียมรายการ line-by-list ที่สามารถอ่านได้มากขึ้นของกลุ่มที่ผู้ใช้เป็นสมาชิก:
id roaima | sed 's/,/\n\t/g'
uid=1001(roaima) gid=1001(roaima) groups=1001(roaima)
24(cdrom)
25(floppy)
...
822413650 (international (uk) location)
ฉันต้องการแยกหมายเลขกลุ่มออกจากชื่อที่มีวงเล็บเหลี่ยมดังนั้นฉันจึงขยายการแสดงออกเช่นนี้
id roaima | sed -e 's/,/\n\t/g' -e '2,$s/(/ (/'
อย่างไรก็ตามสิ่งนี้ไม่ได้ทำตามที่ฉันคาดไว้ในตอนแรก การแสดงออกที่สองดูเหมือนจะไม่มีผลกระทบ
แต่เพื่อให้ได้ผลลัพธ์ที่ฉันต้องการฉันต้องรันสองsed
คำสั่งแยกกันดังนี้:
id roaima | sed -e 's/,/\n\t/g' | sed '2,$s/(/ (/'
uid=1001(roaima) gid=1001(roaima) groups=1001(roaima)
24 (cdrom)
25 (floppy)
...
822413650 (international (uk) location)
ทำไมฉันต้องมีสองsed
คำสั่งในไพพ์แทนที่จะเป็นคำสั่งที่มีหลายคำสั่ง? หรือถ้าฉันสามารถทำได้ด้วยอันเดียวsed
ฉันจะทำยังไงดี?
สิ่งที่ฉันต้องการโดยเฉพาะอย่างยิ่งคือการมีช่องว่างเดียวระหว่างค่า UID / GID และชื่อที่อยู่ในวงเล็บของทุกรายการ (รวมถึง UID และ GID ในบรรทัดแรก) แต่ข้อแม้คือในข้อมูลจริงของฉันฉันสามารถมีกลุ่มได้ มีเครื่องหมายวงเล็บอยู่ในชื่อของพวกเขาและฉันไม่ต้องการชื่อที่ยุ่งเหยิง
-vRS=,
หรือ-054
สามารถช่วยได้