How's that again?

sed

Регэкспы

Чтобы искалось по регэкспу, нужно указать флаг -r

Замена строки в файле

sed -i -- "s/hello/goodbye/g" ./example.txt

Удаление строк, содержащих одну из подстрок

sed -ir -- '/string1\|string2\|string3/d' ./file.txt

Экранирование

Символы $.*/[\]^ экранируются бэкслэшэм (\)

Сложные примеры

Массовый реплэйс в файлах

find . -name "*.js" -exec sed -r -i -- "s/\.\.\/(Ok|Cancel|Dropdown)Button/..\/..\/common\/components\/\1Button/g" {} \;

Ищет во всех .js файлах и заменяет: ../OkButton на ../../common/components/OkButton ../CancelButton на ../../common/components/CancelButton ../DropdownButton на ../../common/components/DropdownButton

Массовое перемещение файлов

find -name "*PrimaryButton*" -exec sh -c 'mv {} $(echo {} | sed "s/Primary/Ok/g")' \;

Изначально пробовал вариант c -exec mv, однако он не подошел, так как видимо shell выполняет выражение в $() до того, как find подставит в {} пути к файлам. В результате пути к файлам оставались неизменными.

find . -name "*.js" -exec sed -r -i -- "s/\.\.\/Picture/..\/..\/common\/components\/Picture/g" {} \; && mv Picture ../common/components