![Замена слова (с учетом регистра) в файле](https://rvso.com/image/169413/%D0%97%D0%B0%D0%BC%D0%B5%D0%BD%D0%B0%20%D1%81%D0%BB%D0%BE%D0%B2%D0%B0%20(%D1%81%20%D1%83%D1%87%D0%B5%D1%82%D0%BE%D0%BC%20%D1%80%D0%B5%D0%B3%D0%B8%D1%81%D1%82%D1%80%D0%B0)%20%D0%B2%20%D1%84%D0%B0%D0%B9%D0%BB%D0%B5.png)
Я новичок в Linux, у меня есть файл на 200 строк. В этом файле мне нужно заменить определенное слово, например:существующее слово: foo Новое слово: bar
Я читал некоторые блоги...я понял, что это можно сделать с помощью sed
. Но я не знаю, как это сделать с помощью скрипта оболочки
sed 's/foo/bar/' /path to a file
Мне нужно написать скрипт, я не знаю, как передать файл в качестве входных данных или мне следует сохранить его в переменной и изменить конкретное слово.
Скрипт должен изменить определенное слово, а также имя файла, например: Входное имя файла: cat home.txt (слово, которое нужно заменить --> cat) Выходное имя файла: Dog home.txt (Cat следует заменить на Dog)
Пожалуйста, помогите!
решение1
Если вы хотите изменить строку, foo
то bar
вы можете использовать это:
#!/bin/bash
# the pattern we want to search for
search="foo"
# the pattern we want to replace our search pattern with
replace="bar"
# my file
my_file="/path/to/file"
# generate a new file name if our search-pattern is contained in the filename
my_new_file="$(echo ${my_file} | sed "s/${search}/${replace}/")"
# replace all occurrences of our search pattern with the replace pattern
sed -i "s/${search}/${replace}/g" "${my_file}"
# rename the file to the new filename
mv "${my_file}" "${my_new_file}"
Обратите внимание, что если шаблон поиска соответствует частям слова, эти части также заменяются, например:
«У меня есть гусеница».
со строкой поиска "кошка" и строкой замены "собака" станет
«У меня есть догерпиллар».
К сожалению, избежать этого не совсем тривиально.