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

Sed เป็นที่รู้จักกันในชื่อ Stream Editor ซึ่งสามารถทำการกรองและ / หรือเปลี่ยนฟังก์ชั่นต่าง ๆ ในอินพุตมาตรฐานหรือไฟล์ที่ผู้ใช้ระบุ มันถูกใช้เพื่อค้นหาและแทนที่ในไฟล์ข้อความ หากคำถามของคุณเกี่ยวกับการประมวลผลข้อความแท็กนี้น่าจะเหมาะสม

3
แยกคำจากสตริงโดยใช้ grep / sed / awk
ฉันมีสาย 00:28:04 /usr/lib/jvm/jre/bin/java -DJDBC_CONNECTION_STRING= -Dspring.profiles.active=qa -XX:MaxPermSize=256 และต้องการแยกคำqaที่ตาม-Dspring.profiles.activeมา ฉันมีบันทึกสตริงในไฟล์ text.txt เพียงเพื่อสาธิตมัน เมื่อฉันทำ grep -r -o "spring.profiles.active=" text.txt ผลที่ได้คือ spring.profiles.active= คำนี้ไม่เคยเป็นqaมันอาจจะเป็นหรือproddev สิ่งที่ผมอยากจะทำคือการหาคำspring.profiles.activeและหลังจาก=สารสกัดจากว่าคำว่า ฉันต้องการเชลล์สคริปต์นี้เพราะฉันใช้คำเพื่อกำหนดค่ารายการอื่น ๆ บนเซิร์ฟเวอร์ เป็นไปได้และถ้าเป็นเช่นนั้นฉันจะทำอย่างไร
12 command-line  bash  grep  sed  awk 

3
Sed แทนประโยคในหลายบรรทัด
ฉันยังใหม่กับการใช้ sed แต่ฉันได้ทดลองใช้ sed s/..../..../(ทดแทน) ของ sed เพื่อแก้ไขประโยคเต็มถ้ามันอยู่ในบรรทัดเดียว แต่ฉันไม่รู้วิธีอื่นในการแก้ไขประโยคที่อาจแยกจากสองบรรทัดเช่น: นี้: Lorem Ipsum is simply dummy text of the printing and typesetting industry. มีการเขียนจริงเช่นนี้: Lorem Ipsum is simply dummy text of the printing and typesetting industry. คุณจะตรวจหารหัสนี้หรือมันเพื่อแทนที่ทั้งประโยคแม้ว่าจะเป็นสองบรรทัดแทนที่จะเป็นหนึ่งบรรทัดได้อย่างไร
11 command-line  sed 

2
ความหมายของอะไร: a; $! N; ในคำสั่ง sed หรือไม่?
$ (echo hello; echo there) | sed ':a;$!N;s/\n/string/;ta' hellostringthere sedคำสั่งด้านบนจะแทนที่อักขระบรรทัดใหม่ด้วยสตริง "string" แต่ฉันไม่รู้ความหมายของ:a;$!N;s/\n/string/;taคำพูดเดียว s/\n/string/ฉันรู้ว่าส่วนตรงกลาง แต่ฉันไม่ทราบหน้าที่ของส่วนแรก ( :a;$!N;) และส่วนสุดท้าย ( ta)

2
ฉันจะได้รับสถานะการออกเมื่อใช้คำสั่ง sed ได้อย่างไร
grepคำสั่งให้ออกออกจากสถานะนี้: $echo "foo.bar" | grep -o foo foo $echo $? 0 $echo "foo.bar" | grep -o pop $echo $? 1 แต่ฉันต้องใช้sedและฉันรู้ว่ามันไม่มีสถานะการออก: $echo "foo.bar" | sed 's/bar.*$//' foo. $echo $? 0 $echo "foo.bar" | sed 's/pop.*$//' foo.bar $echo $? 0 ฉันรู้ว่าฉันควรเล่นด้วย-qตัวเลือก แต่ฉันไม่ประสบความสำเร็จ
11 command-line  sed 

2
หลีกเลี่ยงการแทนที่ช่องว่างเมื่อเปลี่ยนชื่อไฟล์
ฉันพยายามเปลี่ยนชื่อไฟล์เช่นนี้: for file in *; do mv -i "$file" "$(echo "$file" | sed -e 's/[^A-Za-z0-9._-]/_/g')"; done แต่คำสั่งแทนที่ช่องว่างทั้งหมดที่มีsed_ ฉันจะแก้ไขsedคำสั่งเพื่อทำให้เป็นช่องว่างพร้อมกับอักขระที่ระบุได้อย่างไร ฉันลองใช้\sแล้วแต่ไม่ได้ผล ... แก้ไข: ตัวอย่างเช่นไฟล์trip: hill, ควรจะเปลี่ยนชื่อ: แต่คำสั่งดังกล่าวทำให้มันtrip_ hilltrip__hill


3
วิธีแทรกหลายบรรทัดด้วย sed
ฉันต้องการเพิ่มสิ่งนี้ #this ##is my text ก่อนที่จะสาย the specific line ฉันลองสิ่งนี้ sed -i '/the specific line/i \ #this ##is my text ' text.txt แต่เพิ่มเฉพาะใน 'ข้อความ' ฉันยังพยายามชุดต่างๆด้วย\และ" "แต่ไม่มีอะไรทำงาน
10 bash  sed 

2
คำสั่ง 'apt-get remove' นี้ทำอะไร?
รหัสต่อไปนี้ทำอะไร? ฉันพบมันบนอินเทอร์เน็ตดังนั้นฉันจึงคัดลอกและวางลงในเทอร์มินัล แต่เมื่อฉันติดตั้งเคอร์เนลใหม่มันจะตรวจจับสิ่งเก่าเท่านั้น sudo apt-get remove --purge $(dpkg -l 'linux-image-*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d')
10 command-line  apt  kernel  sed 

2
ใช้ AWK เพื่อรับคอลัมน์ที่สอง
ฉันดูเหมือนจะไม่ได้รับคำสั่ง awk เพื่อรับคอลัมน์ที่สองของข้อมูล รหัสทุบตี: filter_data=$(awk "{if(/$filter:/) print $2}" < scanresults_temp.txt) printf "$filter_data \n" ตัวแปร $ filter เป็นค่าของ Download หรือ Upload ที่ถูกส่งเข้าสู่เชลล์สคริปต์ ดังนั้น awk ใช้คำว่า Download หรือ Upload เพื่อค้นหาแถวที่ถูกต้อง เนื้อหาของไฟล์คือ: Testing download speed................................................................................ Download: 51.13 Mbit/s Testing upload speed................................................................................................ Upload: 57.38 Mbit/s ฉันพยายามที่จะได้รับเพียงตัวเลขและไม่ได้อะไรอื่นอดีตและ51.1357.38
9 bash  grep  sed  awk 

6
ชุดคำสั่ง sed ทำงานบนบรรทัดคำสั่ง แต่ไม่อยู่ในสคริปต์
ฉันกำลังทำงานกับ.csvผลลัพธ์ของแบบสอบถามข้อมูล SEซึ่งมีลักษณะเช่นนี้ (เฉพาะกับ 5022 รายการ): "{ ""id"": 281952, ""title"": ""Flash 11.2 No Longer Supported by Google Play"" }" "{ ""id"": 281993, ""title"": ""Netbeans won't open in Ubuntu"" }" (และมี^Mจุดสิ้นสุดบรรทัดระหว่าง [หมายเลข] และ "" ชื่อ "") ฉันต้องการให้มันเป็นแบบนี้: 281952,Flash 11.2 No Longer Supported by Google Play 281993,Netbeans won't open in Ubuntu ฉันแก้ไขสิ่งนี้ในโปรแกรมแก้ไขข้อความบางตัวซึ่งจะยังคงเป็นนิรนามได้อย่างง่ายดาย แต่ฉันต้องการสร้างสคริปต์เพื่อที่ฉันจะได้ไม่ต้องทำซ้ำทุกครั้งที่มีการรีเฟรชคิวรีและอื่น …

2
ฉันจะแทนที่หลายบรรทัดด้วยคำเดียวในไฟล์ (แทนที่แทนที่) ได้อย่างไร
เนื้อหาของfilenameไฟล์ของฉันเป็นดังต่อไปนี้ (ตัวอย่าง): My block of line starts from here START First line second line third line END and end to here for example. ฉันต้องการที่จะแทนที่บล็อกเส้นระหว่างSTARTและมีเพียงคำเดียวเช่นกับEND SINGLEWORDชอบด้านล่าง: My block of line starts from here SINGLEWORD and end to here for example. ฉันสามารถหาบล็อกของบรรทัดด้วยการใช้คำสั่งนี้: grep -Pzo "START(.|\n)*END" filename และผลลัพธ์ของการรันคำสั่งด้านบนจะเป็นดังนี้: START First line second line …

2
ท่อด้วย Moreutils ts
ฉันมีสตรีมขาเข้าที่พอร์ตอนุกรมโดยมีบรรทัดใหม่ปรากฏขึ้นหนึ่งครั้งต่อวินาที wren@Raven:~$ cat /dev/ttyUSB0 A_Sensor1,B_22.00,C_50.00 A_Sensor1,B_22.00,C_50.00 A_Sensor1,B_22.00,C_50.00 A_Sensor1,B_22.00,C_50.00 A_Sensor1,B_22.00,C_50.00 ฉันต้องการตัดเส้นที่ว่างเปล่าและประทับเวลาที่เหลือ sed จะเลือกบรรทัดว่างและเพิ่มการประทับเวลา แต่ฉันไม่สามารถอัปเดตการประทับเวลาได้เพียงรายงานเวลาที่เรียกใช้: wren@Raven:~$ cat /dev/ttyUSB0 | sed -e '/^$/d' -e "s/$/`date +\,%F\,%T`/" A_Sensor1,B_22.00,C_50.00,2014-05-14,09:44:42 A_Sensor1,B_22.00,C_50.00,2014-05-14,09:44:42 A_Sensor1,B_22.00,C_50.00,2014-05-14,09:44:42 A_Sensor1,B_22.00,C_50.00,2014-05-14,09:44:42 A_Sensor1,B_22.00,C_50.00,2014-05-14,09:44:42 A_Sensor1,B_22.00,C_50.00,2014-05-14,09:44:42 A_Sensor1,B_22.00,C_50.00,2014-05-14,09:44:42 ^C ฉันได้พบ ts ส่วนหนึ่งของ Moreutils และสามารถเข้าไปในนั้นเพื่อรับการบันทึกเวลาที่อัปเดต wren@Raven:~$ cat /dev/ttyUSB0 | ts May 14 09:49:26 A_Sensor1,B_22.00,C_50.00 May 14 09:49:26 May 14 …

3
การแทนที่จุด (.) เป็น sed
ดังนั้นคำถามที่แท้จริงคือ - ไม่มีใครมีความคิดวิธีการลบM-BM-ตัวละครพิเศษโดยไม่เสี่ยงต่อการสูญเสียตัวละครอื่น ๆ ? ฉันมีข้อความ: " . . ." นั่นคือ space dot space dot space dot ฉันพยายามแทนที่สตริงนี้ทั้งหมดในไฟล์ข้อความเป็น "..." นั่นคือ dot dot dot ฉันพยายามจะทำกับ sed: sed -r 's:\s\.\s\.\s\.:...:g' -i sed-dots น่าเสียดายที่มันไม่เปลี่ยนไฟล์อินพุตแม้แต่นิดเดียว ไฟล์: https://www.dropbox.com/s/46zmiruy3ln85a1/sed-dots เมื่อฉันพยายามที่จะแทนที่สตริงเดียวกันใน text editor (ฉันใช้ geany) จะพบและแทนที่อย่างถูกต้อง เหตุผลเดียวที่ฉันคิดได้ก็คือพื้นที่บางส่วน (หรือทั้งหมด) ไม่ใช่ช่องว่าง แต่เป็นอักขระพิเศษ ใครบ้างมีความคิดวิธีการค้นหาและแทนที่สตริงนั้นด้วย sed (หรือเครื่องมือบรรทัดคำสั่งอื่น ๆ )? โปรดทดสอบความคิดของคุณในไฟล์ของฉันเนื่องจากปัญหาไม่ชัดเจนเท่าที่ควร - …

5
วิธีรับข้อความจากช่วงวันที่โดยใช้ grep / sed ในไฟล์ข้อความขนาดใหญ่
ฉันมีข้อความไฟล์ใหญ่ (เกือบ 3GB) - มันเป็นไฟล์บันทึก ฉันต้องการรับบรรทัดข้อความที่ตรงกับช่วงวันที่จากไฟล์นี้ตั้งแต่วันที่ 13 กรกฎาคมถึง 19 กรกฎาคม รูปแบบบันทึกของฉันคือ: 2016-07-12 < ?xml version> 2016-07-13 < ?xml version> 2016-07-18 < ?xml version> 2016-07-18 < ?xml version> 2016-07-19 < ?xml version> 2016-07-20 < ?xml version> sample text sample text sample text sample text sample text sample text 2016-07-20 < ?xml …


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