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

"sed" ("stream editor") เป็นยูทิลิตี Unix ที่แยกวิเคราะห์และแปลงไฟล์ข้อความ

3
ฉันจะลบ U + 200B (เว้นวรรคความกว้างเป็นศูนย์) ได้อย่างไรโดยใช้ sed
ฉันมีไฟล์ขนาดใหญ่มากที่มีช่องว่างที่มีความกว้างเป็นศูนย์กระจายอยู่ทั่ว มันต้องใช้เวลานานเกินไปในการเปิดและแก้ไขการใช้ดังนั้นฉันต้องการที่จะลบทุกกรณีของตัวละครโดยใช้vi sedปัญหาคือฉันไม่สามารถหาวิธีจับคู่ตัวละครได้! ฉันลองใช้\u200Bแล้ว\x{200b}. ความคิดใด ๆ ฉันใช้ CentOS 5 ถ้านั่นช่วยได้ทั้งหมด
15 regex  unicode  sed 

3
ฉันจะสร้างสารบัญสำหรับเอกสาร markdown ด้วย Python / AWK / SED ได้อย่างไร
ฉันมีเอกสาร markdown ต่อไปนี้: Heading-a ========== ---text--- Heading-b ------------ --- text --- Heading-c ---------- --- text--- Heading-d ======= --- text---- Heading-e --- ... ฉันต้องการสร้างสารบัญที่สามารถคลิกได้ซึ่งคล้ายกับที่LaTexทำ แต่ไม่สามารถหาเครื่องมือที่ทำสิ่งนี้ซึ่งแนะนำให้ฉันรู้ว่าเราควรสร้างขึ้นมาหนึ่งอัน เครื่องมือควรรวบรวมส่วนหัว 'H1' และส่วนหัว 'H2' เพื่อให้ได้หมายเลข 1 ถึงHeading-aและหมายเลข 1.1 เป็นHeading-b1.2 ถึงHeading-c, 2. ถึงHeading-d, 2.1 ไปHeading-eเรื่อย ๆ เช่นที่เราควรได้รับสารบัญต่อไปนี้: 1. Heading-a 1.1. Heading-b 1.2. Heading-c 2. Heading-d 2.1. Heading-e …

2
แทนที่ n การเกิดขึ้นของสตริงในแต่ละบรรทัดของไฟล์ข้อความ
ฉันมีไฟล์ข้อความขนาดใหญ่ที่มีสตริงคั่นด้วยช่องว่าง (2-5) สตริงสามารถมี "" "หรือ" - " ฉันต้องการแทนที่พูดช่องว่างที่สองด้วยท่อ วิธีที่ดีที่สุดที่จะไปคืออะไร? ใช้ sed ฉันคิดเรื่องนี้: sed -r 's/(^[a-z'-]+ [a-z'-]+\b) /\1|/' filename.txt ความคิดอื่น ๆ / ดีกว่า / เรียบง่ายขึ้น?
15 linux  command-line  sed  awk 

2
Escape slash ไปข้างหน้าอย่างถูกต้องใน bash script เพื่อใช้กับ sed
ฉันกำลังพยายามกำหนดขนาดของไฟล์ที่จะถูกคัดลอกใหม่เมื่อทำการซิงค์สองโฟลเดอร์โดยการเรียกใช้ rsync ในโหมดแห้งแล้วรวมขนาดของไฟล์ที่แสดงในเอาต์พุตของ rsync ขณะนี้ฉันติดอยู่ที่คำนำหน้าไฟล์โดยโฟลเดอร์แม่ของพวกเขา ฉันค้นพบวิธีนำหน้าบรรทัดโดยใช้ sed และวิธีหลบเลี่ยงการใช้ sed แต่ฉันมีปัญหาในการรวมสองรายการนี้ นี่เป็นวิธีที่ฉันได้รับ: source="/my/source/folder/" target="/my/target/folder/" escaped=`echo "$source" | sed -e 's/[\/&]/\\//g'` du `rsync -ahnv $source $target | tail -n +2 | head -n -3 | sed "s/^/$escaped/"` | awk '{i+=$1} END {print i}' นี่คือผลลัพธ์ที่ฉันได้รับจาก bash -x myscript.sh + source=/my/source/folder/ + target=/my/target/folder ++ …

4
การใช้ sed รับซับสตริงระหว่างเครื่องหมายคำพูดคู่สองตัว
ฉันมีไฟล์ xyz... rsync: "/home/path/to/file": Permission denied (13) rsync: "/home/path/to/file1": Permission denied (13) rsync: "/home/path/to/file2": Permission denied (13) rsync: "/home/path/to/file3": Permission denied (13) ตอนนี้ฉันต้องการแยกพา ธ ของไฟล์เท่านั้นและเก็บไว้ในไฟล์อื่น ไฟล์ที่ส่งออกเป็นเช่น: /home/path/to/file /home/path/to/file1 /home/path/to/file2 /home/path/to/file3 ใช้ sed หรือ awk ฉันจะทำสิ่งนี้ได้อย่างไร ฉันได้ลองแล้วsed -n '/"/,/"/p' myfileแต่มันไม่ทำงาน
14 sed 

2
การค้นหาและลบบรรทัดจากไฟล์ทั้งหมดแบบเรียกซ้ำ
ฉันจัดการเพื่อ grep ที่เกิดขึ้นของคำหลักโดยใช้ grep "KeyWord" . -r -n -i -I แต่การเกิดขึ้นของ KeyWord นั้นใหญ่เกินไป ฉันแค่ต้องการลบบรรทัดทั้งหมดที่มีคำนั้น ฉันค้นหาไปรอบ ๆ sed ดูเหมือนจะเป็นอรรถประโยชน์ ใครสามารถบอกฉันว่าคำสั่งจะทำเคล็ดลับหรือไม่ ขอบคุณ
14 grep  sed 

3
วิธีที่ดีกว่าในการทำ“ echo $ x | sed …” และ“ echo $ x | grep …”
ฉันมักจะพบสิ่งนี้ในสคริปต์ (และฉันต้องยอมรับเขียนด้วยตัวเอง): a=$(echo "$x" | sed "s/foo/bar/") หรือ if echo "$x" | grep -q foo then ... fi พิจารณา "foo" เพื่อรวมบางสิ่งที่ regex ฉันรู้สึกว่าควรจะมี - และเป็นไปได้มากที่สุด- เป็นวิธีที่ดีกว่าในการพูดสิ่งนี้สิ่งหนึ่งที่ไม่เกี่ยวข้องกับคำสั่งสองคำสั่งและไปป์ แต่ห่อสิ่งต่างๆ ฉันหามันไม่เจอ ใคร?
14 shell  grep  sed 

4
วิธีการแทนที่ตัวละครซ้ำด้วย sed?
เป็นไปได้หรือไม่ที่จะแทนที่การเกิดขึ้นของลำดับอักขระซ้ำโดยไม่วนซ้ำในลำดับเดียวกันอีกครั้ง? ด้วยการทำsedตามในสถานการณ์ต่อไปนี้ฉันจะได้รับผลลัพธ์ที่กล่าวถึง $ echo XX | sed -e 's/XX/XoX/g' XoX $ echo XXX | sed -e 's/XX/XoX/g' XoXX $ echo XXXX | sed -e 's/XX/XoX/g' XoXXoX อย่างไรก็ตามฉันคาดว่าผลลัพธ์จะเป็นไปตามลักษณะการทำงานต่อไปนี้ การป้อนข้อมูล: XX XXX XXXX ผลลัพธ์ที่คาดหวัง: XoX XoXoX XoXoXoX เป็นไปได้ไหมที่จะบรรลุถึงพฤติกรรมที่คาดหวัง
13 linux  bash  regex  sed 

1
การใช้ sed เพื่อเปิดใช้งานไฟล์. htaccess ใน Apache config
ฉันกำลังพยายามจัดเตรียมกล่องเก็บข้อมูลของ Ubuntu Vagrant โดยอัตโนมัติด้วยสคริปต์ Bash ทุกอย่างดี แต่ฉันมีปัญหากับการกำหนดค่า Apache เพื่อให้แทนที่จาก.htaccessไฟล์ ในไฟล์ปรับแต่งของฉันมีบล็อกดังต่อไปนี้: <Directory /var/www/> Options Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny allow from all </Directory> ทั้งหมดที่ฉันต้องการจะทำคือแทนที่ด้วยAllowOverride None AllowOverride allดูเหมือนว่าจะเป็นงานสำหรับsedแต่มี<Directory>บล็อกอื่น ๆในไฟล์ปรับแต่งนี้ที่ฉันไม่ต้องการให้มีการแทนที่ ฉันจะใช้ sed เพื่อแทนที่สตริงเฉพาะด้วยสตริงใหม่ได้อย่างไรเมื่อสตริงที่ระบุนั้นเกิดขึ้นระหว่างสองสตริงที่ระบุอื่น ๆ กล่าวอีกนัยหนึ่งฉันจะแทนที่AllowOverride Noneเฉพาะเมื่อมันปรากฏระหว่าง<Directory /var/www/>และ</Directory>? ฉันสามารถใช้คำสั่งต่อไปนี้เพื่อรับบล็อกที่ฉันสนใจ: sed -n '/<Directory \/var\/www\/>/,/<\/Directory>/p' 000-default

1
ตัวเลือก `-n 'ใน sed ทำอะไร
นี่คือรายการหน้าคนสำหรับ-n: -n ปราบปรามการพิมพ์พื้นที่รูปแบบอัตโนมัติ ฉันสังเกตเห็นว่าเมื่อไม่ได้ใช้-nสำหรับการทำงานบางอย่างแต่ละบรรทัดจะถูกพิมพ์ไปยัง stdout (และบรรทัดที่ร้องขอจะถูกพิมพ์สองครั้ง): $ cat test.txt first second third fourth fifth $ sed -n '2,3p' test.txt second third $ sed '2,3p' test.txt first second second third third fourth fifth อย่างไรก็ตามกฎหมายนี้ไม่ได้มีไว้สำหรับคำสั่งอื่น ๆ : $ sed -n 's/t/T/' test.txt $ sed 's/t/T/' test.txt firsT second Third fourTh fifTh แล้วจะ-nทำอะไรกันแน่?

3
Cygwin bash sed ล็อคไฟล์ของฉัน
เมื่อฉันเปลี่ยนไฟล์ใน cygwin bash ด้วยคำสั่ง sed ไฟล์จะถูกล็อค ทำซ้ำ: เปิดcmdและcdสู่ไดเรกทอรีที่ไม่ใช่ผู้ใช้ (fe temp) echo aaa > test.txt เปิดใน texteditor เพิ่มบรรทัดลอง save => works %CYGWIN_HOME%\bin\bash -c "sed -i 's/aaa/bbb/' test.txt" ใน texteditor เพิ่มอีกหนึ่งบรรทัดแล้วลองบันทึก => "การเข้าถึงถูกปฏิเสธ" WTF ?! ฉันจะ sed ไฟล์ได้อย่างไรโดยไม่ล็อคหรือปล่อยตัวจัดการไฟล์หลังจากนั้น? สิทธิ์การรักษาความปลอดภัยของ Windows ดูเหมือนว่าจะเมาไฟล์ทั้งหมด: สิทธิ์ก่อน: สิทธิ์หลังจาก: มันทำงานได้ในไดเรกทอรีผู้ใช้ ( Desktop) ฉันตรวจสอบไฟล์ด้วย LockHunter แล้ว แต่ไม่มีกระบวนการใดปรากฏขึ้นเพื่อล็อคไฟล์ Cygwin คำถามที่พบบ่อยกล่าวถึงการแทรกแซงกับบางโปรแกรม …
12 windows  bash  sed  cygwin 

3
ลบอักขระแรกที่รู้จักในสตริงด้วย sed
หนึ่งจะลบตัวอักษรแรกที่รู้จักในสตริงด้วย sed อย่างไร ตัวอย่างเช่นสมมติว่าฉันต้องการลบอักขระตัวแรก (ซึ่งคือ @) ในสตริง "@ ABCDEFG1234" ฉันต้องการให้คนอื่นยืนยันว่า "@" มีอยู่เป็นตัวอักษรตัวแรกหรือไม่ หากเป็นเช่นนั้นควรลบตัวอักขระ
12 sed 

1
การแทนที่ [0-9] ด้วย [AJ] ไม่ทำงานกับ sed
ฉันกำลังทำงานกับคำสั่งที่แทนที่ตัวเลขทั้งหมด 0-9 ด้วยตัวอักษรที่เกี่ยวข้องใน sed ฉันรู้ว่าฉันกำลังทำอะไรผิดพลาด แต่ sed ไม่ได้ตีความ regex การเปลี่ยนเป็นอะไรเลยยกเว้นสตริงตัวอักษร คำสั่งที่ฉันใช้คือ sed -r 's/[0-9]/[A-J]/g' log > ~/output.txt ดูเหมือนจะตรงไปตรงมากับฉัน แต่ฉันติดอยู่กับมันประมาณหนึ่งชั่วโมง ผลลัพธ์ที่ฉันได้รับเพียงแทนที่ 0-9 ด้วยสตริง "[AJ]"

2
ค้นหาหลายรายการและแทนที่การกระทำในไฟล์ข้อความขนาดใหญ่หนึ่งไฟล์
ฉันมีไฟล์ข้อความขนาดใหญ่ (ประมาณ 2GB) ฉันต้องการค้นหาห้ารายการและแทนที่การกระทำในไฟล์เดียวกันและต้องการทำสิ่งนี้ในคำสั่งเดียว ปกติฉันจะใช้ vim, เปิดไฟล์, ทำหนึ่งแทนที่ action, จากนั้นต่อไป, ฯลฯ มีหนึ่ง catch, ดังที่ฉันสังเกตเห็นว่าหลังจากสามหรือสี่การค้นหา vim ล่มเนื่องจากปัญหาหน่วยความจำ นี่คือตัวอย่างของคำสั่งที่ฉันใช้ใน Vim: :%s/www\.abcdef/www.test.abcdef/g :%s/www\.klmnop/www.test.klmnop/g วิธีที่ดีที่สุดในการจัดการกับสิ่งนี้คืออะไร?

1
GNU sed (สำหรับ Windows) สามารถจัดการ Unicode ได้หรือไม่ ถ้าเป็นเช่นนั้นมันเป็นปัญหาของโค้ดเพจ / โลแคลหรือสวิตช์?
ฉันใช้ GNU SED เปิดและปิดเป็นเวลาสองปีแล้ว มันหมุนฉันออกไปเล็กน้อย แต่ก็ทำได้ดี ... สำหรับชุดถ่านไบต์เดียว! ตอนนี้ฉันแล้วสังเกตการอ้างอิงถึง GNU SED ว่าเป็น Unicode-aware แต่สิ่งที่ใกล้เคียงที่สุดที่ฉันเคยเห็นคือโหมด "binary" .. และไบนารีไม่ใช่ Unicode GSED สามารถประมวลผลไฟล์ข้อความ Unicode ที่ความละเอียด CodePoint รวมถึงและโดยเฉพาะ \ r \ n (Windows) ... และถ้าทำได้สามารถคาดหวังว่า UTF-8, UTF-16 หรืออะไร? และ SED ตรวจจับการเข้ารหัสอย่างไร
10 windows  encoding  unicode  sed  gnu 

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