คำถามติดแท็ก sed

sed เป็นตัวแก้ไขสตรีมบรรทัดคำสั่งสำหรับการกรองและแปลงข้อความ

2
sed - ใช้การเปลี่ยนแปลงในหลายไฟล์
ฉันมีหลายร้อยไฟล์ซึ่งมี " </foo:bar>" cc bb aa </foo:bar> dd xx vv ฉันต้องการเปลี่ยนพวกเขาทั้งหมดในครั้งเดียวเพื่อ cc bb aa </foo:bar> sed ทำงานได้ดีเมื่อฉันให้ชื่อไฟล์ที่แน่นอน sed -i "/ </ foo: bar> / q" 99999.txt แต่เมื่อฉันพยายามที่จะเปลี่ยนพวกเขาทั้งหมดในครั้งเดียวฉันไม่ได้รับผล sed -i "/<\/foo:bar>/q" *.txt

3
พิมพ์คอลัมน์ที่ขึ้นต้นด้วยสตริงที่ระบุ
ฉันมีไฟล์ที่มีลักษณะดังนี้: ID101 G T freq=.5 nonetype ANC=.1 addinfor ID102 A T freq=.3 ANC=.01 addinfor ID102 A T freq=.01 type=1 ALT=0.022 ANC=.02 addinfor อย่างที่คุณเห็นแต่ละบรรทัดมีจำนวนคอลัมน์แตกต่างกันเล็กน้อย ฉันต้องการคอลัมน์ 1 คอลัมน์ 2 คอลัมน์ 3 คอลัมน์ 4 และคอลัมน์ที่ขึ้นต้นด้วยANC= ผลลัพธ์ที่ต้องการ: ID101 G T freq=.5 ANC=.1 ID102 A T freq=.3 ANC=.01 ID102 A T freq=.01 ANC=.02 ฉันมักจะใช้คำสั่ง awk …

8
แยกไฟล์ข้อความเป็นบรรทัดที่มีจำนวนคำคงที่
ที่เกี่ยวข้อง แต่ไม่มีคำตอบที่น่าพอใจ: ฉันจะแยกไฟล์ข้อความขนาดใหญ่เป็นชิ้น ๆ จำนวน 500 คำได้อย่างไร ฉันพยายามที่จะใช้ไฟล์ข้อความ ( http://mattmahoney.net/dc/text8.zip ) ด้วย> 10 ^ 7 คำทั้งหมดในบรรทัดเดียวและแยกเป็นบรรทัดด้วยคำที่ไม่มีคำแต่ละคำ วิธีการปัจจุบันของฉันใช้งานได้ แต่ค่อนข้างช้าและน่าเกลียด (ใช้เชลล์สคริปต์): i=0 for word in $(sed -e 's/\s\+/\n/g' input.txt) do echo -n "${word} " > output.txt let "i=i+1" if [ "$i" -eq "1000" ] then echo > output.txt let "i=0" fi done …

3
คำสั่ง tr สามารถถูกโยงโซ่เพื่อหลีกเลี่ยงกระบวนการ tr หลายอย่างในไพพ์ไลน์หรือไม่?
ฉันมีไฟล์ txt มากมายฉันต้องการส่งออกตามลำดับที่ต่ำกว่ามีเพียงตัวอักษรและหนึ่งคำต่อบรรทัดฉันสามารถทำได้ด้วยtrคำสั่งต่าง ๆในขั้นตอนนี้: tr -d '[:punct:]' <doyle_sherlock_holmes.txt | tr '[:upper:]' '[:lower:]' | tr ' ' '\n' สามารถทำได้ในการสแกนครั้งเดียวหรือไม่? ฉันสามารถเขียนโปรแกรม C ที่จะทำเช่นนี้ แต่ฉันรู้สึกเหมือนมีวิธีที่จะทำมันได้ใช้tr, sed, หรือawkperl
11 sed  awk  perl  tr 

5
จะใช้เชลล์เพื่อรับที่อยู่ IPv6 จากที่อยู่ MAC ได้อย่างไร
เรารู้ว่าเราสามารถใช้ที่อยู่ MAC เพื่อสร้างตัวระบุอินเทอร์เฟซเช่นสำหรับที่อยู่ IPv6 ลิงก์ท้องถิ่นซึ่งควรจะไม่ซ้ำกันในเครือข่าย ภาพแสดงวิธีการทำสิ่งนี้: คำถามของฉันคือ: ฉันจะสร้างที่อยู่ IPv6 จาก MAC โดยใช้awkหรือsedอย่างไร หรือมีคำสั่งใดบ้างที่ให้ที่อยู่ IPv6 สำหรับการเชื่อมโยงท้องถิ่นสำหรับ MAC เฉพาะ (เช่นนั้นcreateIPv6 myMAC)
11 sed  awk  ipv6  mac-address 

2
ทำไมฉันต้องหลบหนีอักขระ regex ใน sed เพื่อตีความว่าเป็นอักขระ regex
ดูเหมือน cat sed_data.txt | sed 's/\b[0-9]\{3\}\b/NUMBER/g' ว่าฉันจะต้องหลบหนีตัวละครเพื่อสร้างการแสดงออกปกติ ในกรณีนี้ฉันต้องหลบหนีเครื่องมือจัดฟันเพื่อที่จะตีความได้หลายครั้ง ทำไม? ฉันคาดหวังว่าทุกอย่างจะเป็นตัวละคร regex เว้นแต่จะหลบหนี นั่นคือสิ่งที่ตรงกันข้าม

2
จะลบหลายบรรทัดต่อการเกิดขึ้นในไฟล์ได้อย่างไร?
สมมติว่าฉันมีไฟล์บรรทัดนี้ 857835 มีเนื้อหาดังนี้: a1 rubbish1 rubbish2 rubbish3 rubbish4 a1 rubbish5 rubbish6 rubbish7 rubbish8 และฉันต้องการที่จะลบสิ่งที่เกิดขึ้นทั้งหมดa1และบรรทัดถัดไป ( rubbish1และrubbish5ในตัวอย่างนี้) ฉันต้องทำอย่างไร? ฉันพยายามที่grep 'a1' -v -A1จะไม่เกิดประโยชน์และความสามารถของฉันไม่ดีนัก:} Google-fu ของฉันไม่สามารถช่วยฉันได้ในครั้งนี้มีคนช่วยด้วย!

6
ลบบรรทัดที่ไม่ได้เริ่มต้นด้วยรูปแบบจากชุดรูปแบบที่กำหนด
ฉันมีไฟล์ที่มีข้อมูลเช่นนี้: report aaaaaaaa - .. -th bbbbbbbbb -to ccccccccc .. --. คำถาม: ฉันต้องการลบบรรทัดที่ไม่ได้ขึ้นต้นด้วยสตริงต่อไปนี้: report -th -to นั่นหมายถึงผลลัพธ์ที่ต้องการจะลบจุดและแฮชกลางที่ไม่ต้องการทั้งหมดออกและจะมีลักษณะเช่นนี้: report aaaaaaaa -th bbbbbbbbb -to ccccccccc sed/ awk/ grep/ ฯลฯ วิธีการแก้ปัญหาใด ๆ ที่จะทำงาน

2
sed: จับคู่สองบรรทัด
ฉันมีไฟล์ข้อความที่มีการบันทึกแยกสองบรรทัด ฉันต้องการที่จะนำพวกเขาในบรรทัดเดียว ระเบียนมีลักษณะดังนี้: 2013-07-29 apt-get install git 2013-07-29 apt-get install rsync 2013-07-31 apt-get install nmap 2013-08-02 apt-get install cifs-utils 2013-08-05 apt-get install telnet ฉันต้องการรับสิ่งต่อไปนี้: 2013-07-29 apt-get install git 2013-07-29 apt-get install rsync 2013-07-31 apt-get install nmap 2013-08-02 apt-get install cifs-utils 2013-08-05 apt-get install telnet ฉันลองด้วยsedแต่ฉันไม่สามารถจับคู่สองบรรทัดได้ มีเคล็ดลับบางอย่างsedหรือมีเครื่องมือที่ดีกว่านี้หรือไม่

3
ทำไมต้อง expr1 | sed expr2` ต่างจาก `sed -e expr1 -e expr2`
ฉันได้แยกเอาต์พุตจาก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 …
10 sed  group 


2
คุณสามารถอธิบายสามสิ่งนี้ในรหัสทุบตีนี้ให้ฉันได้ไหม
ฉันมีfunctionใน.bashrcไฟล์ของฉัน ฉันรู้ว่ามันทำอะไรมันทำตามขั้นตอน X หลาย ๆ ไดเรกทอรีด้วยcd นี่มันคือ: up() { local d="" limit=$1 for ((i=1 ; i <= limit ; i++)) do d=$d/.. done d=$(echo $d | sed 's/^\///') if [ -z "$d" ]; then d=.. fi cd $d } แต่คุณสามารถอธิบายสามสิ่งนี้จากฉันได้ไหม? d=$d/.. sed 's/^\///' d=.. ทำไมไม่ทำเช่นนี้: up() { limit=$1 for ((i=1 …

5
awk / sed / perl one liner + วิธีพิมพ์เฉพาะบรรทัดคุณสมบัติจากไฟล์ json
วิธีพิมพ์เฉพาะคุณสมบัติบรรทัดจากไฟล์ json ตัวอย่างของไฟล์ json { "href" : "http://master02:8080/api/v1/clusters/HDP/configurations?type=kafka-env&tag=version1527250007610", "items" : [ { "href" : "http://master02:8080/api/v1/clusters/HDP/configurations?type=kafka-env&tag=version1527250007610", "tag" : "version1527250007610", "type" : "kafka-env", "version" : 8, "Config" : { "cluster_name" : "HDP", "stack_id" : "HDP-2.6" }, "properties" : { "content" : "\n#!/bin/bash\n\n# Set KAFKA specific environment variables here.\n\n# The java implementation to …
10 awk  sed  perl  json  jq 

1
sed -e '$! d' ไม่ทำงานตามที่คาดไว้
เมื่อฉันวิ่ง: sudo /usr/local/nginx/sbin/nginx -t ฉันกลับมา: nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful ฉันแค่ต้องการบรรทัดสุดท้ายดังนั้นฉันจึงเรียกใช้: sudo /usr/local/nginx/sbin/nginx -t | sed -e '$!d' แต่ฉันกลับได้เหมือนเดิมโดยไม่ต้องใจเย็น ๆ

5
การใช้งาน regexp แบบขยายเพื่อเพิ่มจำนวนตัวแปรของศูนย์นำหน้าตามตำแหน่งในสตริง
ฉันมีปัญหาในการทำให้ซิงก์ของฉันช้าลงเพื่อเพิ่มตัวเลขนำหน้าจำนวนหนึ่งให้กับรูปแบบองค์กรตัวเลข สตริงที่ฉันกำลังทำงานอยู่นั้นดูเหมือนว่า 1.1.1.1,Some Text Here ใช้ประโยชน์จากไวยากรณ์ซิด sed -r ":r;s/\b[0-9]{1,$((1))}\b/0&/g;tr" ฉันสามารถกระตุ้นการตอบสนองได้ 01.01.01.01,Some Text Here อย่างไรก็ตามสิ่งที่ฉันกำลังมองหาคือสิ่งที่เติมศูนย์ถึง 2 หลักในฟิลด์ 2 และ 3 และ 3 และ 3 หลักในฟิลด์ 4 เพื่อให้รายการทั้งหมดมีความยาวมาตรฐานที่ [0-9] [0-9] { 2}. [0-9] {2}. [0-9] {3} 1.01.01.001,Some Text Here สำหรับชีวิตของฉันฉันไม่สามารถคิดได้ถึงวิธีการปรับเปลี่ยนขอบเขตเพื่อรวมพารามิเตอร์ที่จำเป็นในการถ่ายภาพเป็นตัวเลขเท่านั้นหลังจากระยะ ฉันคิดว่ามันมีบางอย่างเกี่ยวกับการใช้ \ b ซึ่งฉันเข้าใจการจับคู่ศูนย์อักขระที่ขอบเขตคำ แต่ฉันไม่เข้าใจว่าทำไมความพยายามของฉันในการเพิ่มช่วงเวลาในการแข่งขันล้มเหลวดังนี้: sed -r ":r;s/\.\b[0-9]{1,$((1))}\b/0&/g;tr" sed -r ":r;s/\b\.[0-9]{1,$((1))}\b/0&/g;tr" Both …

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