วิธีที่จะได้รูปแบบจากไฟล์


4

ฉันมีสองไฟล์หนึ่งเก็บรายการของรูปแบบอื่นต้องเปลี่ยนตามรูปแบบเหล่านี้ จนถึงตอนนี้ฉันได้ทำการทดลองกับ

cat patterns.txt| xargs -n1| sed 's/patternfromfile/subtitution/'

แต่ฉันไม่แน่ใจว่าจะป้อน xargs ลงใน 's / here //' ได้อย่างไร

ขอบคุณ

คำตอบ:


5

คุณอาจต้องการตัวเลือก -i เพื่อ xargs (ตรวจสอบรายละเอียด man page) ที่สำคัญแทนที่{}ด้วยรูปแบบและเรียกใช้คำสั่งหนึ่งครั้งต่อรูปแบบ ดังนั้นมันจะทำงานบนไฟล์หนึ่งครั้งต่อรูปแบบ คุณจะต้องจำไว้ว่าเมื่อสร้างรูปแบบของคุณ

user@host [/tmp]$ cat patterns
a
[pd]ie
user@host [/tmp]$ cat file
hat
cherry pie
die alone
eat cake
user@host [/tmp]$ cat patterns | xargs -i sed 's/{}/moo/' file
hmoot
cherry pie
die moolone
emoot cake
hat
cherry moo
moo alone
eat cake

หรือคุณสามารถใช้อย่างอื่นเพื่อสร้างสคริปต์แบบไดนามิกจากไฟล์รูปแบบของคุณ ตัวอย่างเช่นคุณสามารถใช้ sed บนไฟล์รูปแบบของคุณเพื่อปรับใช้ทั้งหมดในการส่งผ่านไฟล์ครั้งเดียว :)

user@host [/tmp]$ sed 's|^|s/|;s|$|/moo/;|' patterns | tee patterns.sed
s/a/moo/;
s/[pd]ie/moo/;
user@host [/tmp]$ sed -f patterns.sed file
hmoot
cherry moo
moo moolone
emoot cake

แค่นั้นแหละ! มันทำงานได้อย่างสมบูรณ์แบบขอบคุณมาก
sgp667

0

คุณไม่รู้ว่าคุณมีรูปแบบใด:

ใช้ตัวเลือก -i หากคุณต้องการแก้ไข yourfile โดยตรง:

   while read pattern
    do
        sed -i 's/"${pattern}"/substitution/' yourfile
    done < patterns.txt

หรือเปลี่ยนเส้นทางเอาต์พุตไปยังไฟล์ใหม่:

   while read pattern
    do
        sed 's/"${pattern}"/substitution/' yourfile >> outfile
    done < patterns.txt

close: การทดแทนตัวแปรจะไม่เกิดขึ้นเนื่องจากคำพูดเดียว
เกล็นแจ็คแมน

0

คุณสามารถสร้าง regex ดังนี้:

regex=$(tr '\n' '|' < patterns.txt)
sed -ri "s/$regex/replacement/" filename

คุณอาจเลือกที่จะเพิ่มการตั้งค่าสถานะ "g" ลงในคำสั่ง s ///

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