คำถามติดแท็ก text-processing

การจัดการหรือตรวจสอบข้อความโดยโปรแกรมสคริปต์ ฯลฯ

2
วิธีแสดง TSV (csv) ในคอนโซลเมื่อไม่พบเซลล์ว่าง: `column -t -s $ '\ t' '
ฉันมีไฟล์ที่มีคอลัมน์ spearated tabกับ ฉันมีไฟล์เมื่อบางแถวมีเซลล์ว่าง (ที่จุดเริ่มต้นตรงกลาง) ในกรณีดังกล่าวcolumn -t -s $'\t'ก็ล้มเหลว: การป้อนข้อมูล: $ echo -e 'A\tB\tC\tD\n\tb1\t\td1\n\t\t\td2\na3\t\t\td3' > in.tsv $ hexdump -C in.tsv 00000000 41 09 42 09 43 09 44 0a 09 62 31 09 09 64 31 0a |A.B.C.D..b1..d1.| 00000010 09 09 09 64 32 0a 61 33 09 09 09 …

2
วิธีการแยก stdout เพื่อไปยังไฟล์ที่ส่งออกหลาย ๆ
บอกว่าฉันมีคำสั่งcommandที่พิมพ์บรรทัดจำนวนมากไปยัง stdout: line1 line2 ..... lineN ฉันต้องการบันทึกผลลัพธ์ไปยังดิสก์ แต่ไม่ใช่ไฟล์เดียว แต่เป็นลำดับของไฟล์แต่ละไฟล์มี stdout 1,000 บรรทัด: file0001.txt: ------------- line1 .... line1000 file0002.txt: ------------- line1001 .... line2000 etc ฉันพยายาม google คำตอบ แต่ทุกครั้งที่ google ชี้ให้ฉันteeคำสั่งซึ่งไร้ประโยชน์ในสถานการณ์นี้ อาจเป็นเพราะฉันป้อนข้อความค้นหาไม่ถูกต้อง

3
wc -L รายงานความยาวบรรทัด 8 สำหรับ tab-char ข้อผิดพลาดหรือคุณสมบัติ?
-Lเป็นคุณสมบัติที่มีประโยชน์ของwcหรือดังนั้นฉันคิดว่า มันพิมพ์ความยาวของบรรทัดที่ยาวที่สุด ด้วยเหตุผลบางอย่างมันขยายแท็บเดี่ยวไบต์ถึงความยาว 8 มีวิธีการตั้งค่านี้เพื่อไม่ "ขยาย" แท็บ? และอะไรคือเหตุผลเบื้องหลังการขยายตัวนี้ echo -n $'\t' | wc -L เอาท์พุท 8 wc (coreutils ของ GNU) 7.4 bash ของ GNU, รุ่น 4.1.5

2
ใน `ขณะที่ IFS = อ่าน .. 'ทำไม IFS ถึงไม่มีผลกระทบ?
ฉันอาจมีบางอย่างผิดปกติ แต่ดูเหมือนว่าฉันเชื่อว่าการตั้งค่า IFS เป็นหนึ่งในคำสั่งในรายการที่ต้องทำ / เสร็จไม่มีผลอย่างแน่นอน IFS ภายนอก (ภายนอกwhileโครงสร้าง) จะมีชัยในตัวอย่างทั้งหมดที่แสดงในสคริปต์ด้านล่าง .. เกิดอะไรขึ้นที่นี่? ฉันเข้าใจผิดว่า IFS ทำอะไรในสถานการณ์นี้หรือไม่? ฉันคาดว่าผลลัพธ์การแบ่งอาร์เรย์จะเป็นไปตามที่แสดงในคอลัมน์ "คาดหวัง" #!/bin/bash xifs() { echo -n "$(echo -n "$IFS" | xxd -p)"; } # allow for null $IFS show() { x=($1) echo -ne " (${#x[@]})\t |" for ((j=0;j<${#x[@]};j++)); do echo -n "${x[j]}|" done echo …

4
พวกเขาจัดการขับคอมพิวเตอร์ Unix อย่างไรก่อนที่หนูจะคัดลอกและวาง
เนื่องจากยูนิกซ์อายุ 40 ปียูนิกซ์เก่ากว่าการประดิษฐ์เมาส์คอมพิวเตอร์ (อันที่จริงเพียง 3 ปีถ้า Unix มาจาก 1969 และเมาส์จาก 1972) ผู้ใช้ใหม่ทำอะไรบน Unix ได้อย่างไรในโลกโดยไม่ต้องคัดลอกและวาง ฉันรู้ว่าพวกเขามักจะมีโปรแกรมแก้ไขข้อความพร้อมคัดลอก / วาง แต่ทุกอย่างที่ฉันทำบน Linux คือสำเนาจากเว็บเบราว์เซอร์และวาง (จาก CLIPBOARD) ลงใน vim หรือ gedit หรือ terminal gnome คุณเหมือนกันใช่มั้ย ฉันไม่สามารถจินตนาการถึงการโหลดไฟล์ man ลงในกลุ่มคัดลอกและวางโค้ดจากมันลงใน buffer ชั่วคราวจากนั้นให้ทุบตีประมวลผลบัฟเฟอร์นั้น บางทีพวกเขาไม่เคยทิ้ง emacs; นั่นคือคำตอบ?

3
มีวิธีที่จะทำให้ Perl - ฉันไม่ได้เชื่อมโยงการอุดตัน?
เพื่อนของฉันชี้ให้เห็นว่าถ้าคุณ: perl -pi.bak -e 's/foo/bar/' somefile เมื่อ "somefile" เป็น symlink จริง Perl จะทำตามที่เอกสารบอกว่าจะทำ: ทำได้โดยเปลี่ยนชื่อไฟล์อินพุตเปิดไฟล์เอาต์พุตโดยใช้ชื่อดั้งเดิมและเลือกไฟล์เอาต์พุตนั้นเป็นค่าเริ่มต้นสำหรับคำสั่ง print () ส่วนขยายหากให้มาจะใช้ในการแก้ไขชื่อของไฟล์เก่าเพื่อทำสำเนาสำรอง [... ] ซึ่งส่งผลให้ symlink ใหม่ "somefile.bak" ชี้ไปที่ไฟล์จริงที่ไม่เปลี่ยนแปลงและไฟล์ใหม่ "somefile" ที่มีการเปลี่ยนแปลงปกติพร้อมการเปลี่ยนแปลง ในหลายกรณีการติดตาม symlink จะเป็นพฤติกรรมที่ต้องการ (แม้ว่าจะออกจากตำแหน่งที่ถูกต้องของไฟล์. bak ที่ไม่ชัดเจน) มีวิธีง่ายๆในการทำเช่นนี้นอกเหนือจากการทดสอบ symlink ใน wrapper และการจัดการกรณีอย่างเหมาะสมหรือไม่? ( sedทำสิ่งเดียวกันเพื่อสิ่งที่คุ้มค่า)

3
การแยกไฟล์บันทึกสำหรับ IP ที่ใช้บ่อย
ดังนั้นฉันจึงแฮกมันด้วยกันในขณะที่กำลังโจมตี DDOS เพื่อดึงIPS ที่ซุกซนออกจากบันทึกของฉัน ใครมีการปรับปรุงหรือคำแนะนำอื่น ๆ เพื่อให้ดีขึ้นหรือไม่ นี่คือแนวคิดทั่วไป: ดึง ip ออกจากไฟล์บันทึกเท่านั้น จัดเรียงพวกเขา uniq และนับพวกเขา จัดเรียงพวกเขาอีกครั้ง และสตริง: cut --delim " " -f7 /var/log/apache_access | sort | uniq -c | sort -rn > sorted-ips.txt

3
พิมพ์คอลัมน์ใน awk ตามชื่อส่วนหัว
ฉันมีไฟล์ข้อความเช่นนั้น foo bar baz 1 a alpha 2 b beta 3 c gamma ฉันสามารถใช้ awk พิมพ์คอลัมน์บางอย่างเช่น 1 และ 3 ด้วยแต่ผมต้องการระบุคอลัมน์ที่จะพิมพ์โดยการระบุส่วนหัวของคอลัมน์แทนสิ่งที่ชอบ{print $1, $3} {print $foo, $baz}สิ่งนี้มีประโยชน์ดังนั้นฉันจึงไม่ต้องเปิดไฟล์และนับคอลัมน์ด้วยตนเองเพื่อดูว่าคอลัมน์ใดอยู่และฉันไม่จำเป็นต้องอัปเดตสคริปต์หากหมายเลขคอลัมน์หรือคำสั่งซื้อเปลี่ยนแปลง ฉันสามารถทำสิ่งนี้ด้วย awk (หรือเครื่องมือเชลล์อื่น) ได้หรือไม่

4
ลบพื้นที่ว่างสำหรับชุดของบรรทัดในโปรแกรมแก้ไข Vim
ฉันมีข้อความเหมือนดังต่อไปนี้ในไฟล์: sample text some random text even more random text text with no indent worst indention ฉันต้องการลบพื้นที่ว่างก่อนแต่ละบรรทัด สำหรับหนึ่งบรรทัดสิ่งที่ฉันทำคือ 0dw ฉันสามารถทำซ้ำคำสั่งเดียวกันโดยใช้ แต่ด้วยการนำทางไปยังบรรทัดถัดไปด้วยตนเอง แต่มีวิธีใช้ '0dw' กับบล็อกบรรทัดเหล่านั้นหรือไม่ ฉันคิดว่ามีวิธีใช้แมโคร แต่ฉันไม่ได้ใช้มาก่อน แต่ฉันยินดีที่จะเรียนรู้พวกเขาหากไม่มีทางเลือกอื่น

3
ป้องกัน EOF อัตโนมัติไปที่ไปป์ที่มีชื่อและส่ง EOF เมื่อฉันต้องการ
ฉันมีโปรแกรมที่ออกโดยอัตโนมัติเมื่ออ่าน EOF ในสตรีมที่กำหนด (ในกรณีต่อไปนี้ stdin) ตอนนี้ฉันต้องการสร้างเชลล์สคริปต์ซึ่งสร้างไพพ์ที่มีชื่อและเชื่อมต่อ stdin ของโปรแกรม จากนั้นสคริปต์จะเขียนไปยังไพพ์หลายครั้งโดยใช้echoและcat(และเครื่องมืออื่น ๆ ที่สร้าง EOF โดยอัตโนมัติเมื่อพวกเขาออก) ปัญหาที่ฉันเผชิญคือเมื่อสิ่งแรกechoเสร็จแล้วมันจะส่ง EOF ไปที่ไพพ์และทำให้โปรแกรมออกจาก ถ้าฉันใช้บางอย่างเช่นtail -fนั้นฉันจะไม่สามารถส่ง EOF เมื่อฉันตั้งใจจะออกจากโปรแกรม ฉันกำลังค้นคว้าวิธีแก้ปัญหาที่สมดุล แต่ก็ไม่มีประโยชน์ ฉันพบวิธีป้องกัน EOF และวิธีส่ง EOF ด้วยตนเองแล้ว แต่ไม่สามารถรวมเข้าด้วยกันได้ มีคำใบ้อะไรบ้าง? #!/bin/sh mkfifo P program < P & : # Run in background # < P tail -n +1 -f | program …

10
ลบคำที่ซ้ำกันทั้งหมดออกจากสตริงโดยใช้เชลล์สคริปต์
ฉันมีสตริงเหมือน "aaa,aaa,aaa,bbb,bbb,ccc,bbb,ccc" ฉันต้องการลบคำที่ซ้ำกันออกจากสตริงจากนั้นผลลัพธ์จะเป็นเช่นนั้น "aaa,bbb,ccc" ฉันลองรหัสนี้แหล่งที่มา $ echo "zebra ant spider spider ant zebra ant" | xargs -n1 | sort -u | xargs มันทำงานได้ดีกับค่าเดียวกัน แต่เมื่อฉันให้ค่าตัวแปรแล้วมันจะแสดงคำที่ซ้ำกันทั้งหมดด้วย ฉันจะลบค่าที่ซ้ำกันได้อย่างไร UPDATE คำถามของฉันคือการเพิ่มค่าที่สอดคล้องกันทั้งหมดลงในสตริงเดียวถ้าผู้ใช้เหมือนกันฉันมีข้อมูลเช่นนี้ -> user name | colour AAA | red AAA | black BBB | red BBB | blue AAA | blue AAA | red …

4
เป็นไปได้หรือไม่ที่จะแก้ไขไฟล์ yml ผ่าน shell script?
นี่คือลักษณะที่นักเทียบท่าของฉัน-compose.yml ดูเหมือน nginx: container_name: 'nginx' image: 'nginx:1.11' restart: 'always' ports: - '80:80' - '443:443' volumes: - '/opt/nginx/conf.d:/etc/nginx/conf.d:ro' links: - 'anything' ตอนนี้ฉันต้องเพิ่มเนื้อหาผ่านเชลล์สคริปต์ (บนเซิร์ฟเวอร์ ubuntu) ฉันไม่แน่ใจว่ามันจะเป็นไปได้ทั้งหมด: เพิ่มองค์ประกอบใหม่ให้กับnginx/linksหากไม่มีอยู่ ผนวกnewthingบล็อกถ้าไม่มีสิ่งบล็อกใหม่อยู่ เนื้อหาใหม่ควรมีลักษณะเช่นนี้: nginx: container_name: 'nginx' image: 'nginx:1.11' restart: 'always' ports: - '80:80' - '443:443' volumes: - '/opt/nginx/conf.d:/etc/nginx/conf.d:ro' - '/etc/letsencrypt:/etc/letsencrypt' links: - 'anything' - 'newthing' newthing: …

4
ฉันจะแทนที่ข้อความหลังจากคำใดคำหนึ่งโดยใช้ sed ได้อย่างไร
.ignoreฉันมีไฟล์ชื่อ projdirในความต้องการที่จะเปลี่ยน ตัวอย่างเช่น: ignore \..* ignore README projdir Snake ฉันต้องการแทนที่ Snake ด้วยเช่น "PacMan" ฉันอ่าน man page แต่ฉันไม่รู้จะทำอย่างไร

2
ลบทุกบรรทัดที่ไม่มีอักขระ n ก่อนตัวคั่น
ฉันมีไฟล์ข้อความที่ยาวมาก (จากที่นี่ ) ซึ่งควรมีอักขระฐานสิบหก 6 ตัวและ 'ตัวแบ่ง' (ซึ่งปรากฏเป็นอักขระตัวเดียวและดูเหมือนจะไม่แสดงอย่างถูกต้องในการทำเครื่องหมายรหัสด้านล่าง) ตามด้วยคำสองสามคำ: 00107B Cisco Systems, Inc 00906D Cisco Systems, Inc 0090BF Cisco Systems, Inc 5080 Cisco Systems, Inc 0E+00 ASUSTek COMPUTER INC. 000C6E ASUSTek COMPUTER INC. 001BFC ASUSTek COMPUTER INC. 001E8C ASUSTek COMPUTER INC. 0015F2 ASUSTek COMPUTER INC. 2354 ASUSTek COMPUTER INC. 001FC6 …


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