sed - як зробити кілька послідовних підстановок, але обробити файл лише один раз?


31

Якщо я роблю кілька замін, які повинні бути послідовними, наприклад

sed -i '/^[[:space:]]*browser.*\.should/s/browser/expect(browser/' t1_spec.rb
sed -i '/expect(browser.*\.should/s/\.should/).should/' t1_spec.rb
sed -i 's/\.should/\.to/' t1_spec.rb 
sed -i 's/==/eq/' t1_spec.rb 

Чи є кращий спосіб зробити це, який пройде через t1_spec.file лише один раз і зробить 4 підстановки для кожного рядка, а не переглядає файл 4 рази?

Відповіді:


43

Окрім використання крапки з комою, ви також можете надати більше, ніж один вираз sed, використовуючи -eпрапор:

sed -i -e 's/expr1/replace1/' -e 's/expr2/replace2/'  t1_spec.rb 

14

У GNU (наприклад, на моїй машині Ubuntu) підтримується просто використання декількох рядків і працює добре і добре виглядає (imho), оскільки це дозволяє уникнути супер довгих ліній, наприклад

sed -i '/^[[:space:]]*browser.*\.should/s/browser/expect(browser/
        /expect(browser.*\.should/s/\.should/).should/
        s/\.should/\.to/
        s/==/eq/' t1_spec.rb 

5

Ви можете використовувати крапки з комою для розділення різних підрозділів між окремими лапками, або ви можете помістити всі ці команди у файл та вказати файл із -fможливістю sed.

Використання файлу особливо корисно, якщо ви збираєтеся використовувати один і той же набір sedкоманд знову і знову. Раніше мені доводилося стикатися з брудним каналом даних, і я закінчився з часом файлом у 88 рядках, який massage.sedавтоматично викликав очищення більшості найпоширеніших помилок, отриманих у каналі.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.