%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}"
Обратите внимание, что если шаблон поиска соответствует частям слова, эти части также заменяются, например:
«У меня есть гусеница».
со строкой поиска "кошка" и строкой замены "собака" станет
«У меня есть догерпиллар».
К сожалению, избежать этого не совсем тривиально.