Мне нужно создать сценарий bash, который считывает файл, содержащий переменную = текст. Мне нужно, чтобы сценарий проверял файл, игнорировал имя переменной и искал слово в тексте после символа =.
Пример
thread.give_respect.title = Give respect
thread.receive_respect.title = Gain respect
thread.profile_respect.title = Show my Respect
Поскольку первая часть является переменной, я не хочу, чтобы слово респект изменялось. Только тот, который стоит после = Также, если возможно, я хочу проверить, является ли слово, которое я хочу изменить, заглавным или нет, чтобы я мог изменить его соответствующим образом.
Edit:
Esteban Я пробовал ваш сценарий, но он создает файл с $ {var в начале каждой строки.
Для других ребят, которые спрашивают, что я хочу заменить:
У нас есть огромные файлы с строковыми переменными = их текстом . Например:
admin.help_text = help
admin.Help_text = Help
home.faq_title = FAQ
...
Эти файлы содержат более 15000 переменных и их значений. Иногда нам нужно изменить слово на другое , например:
**help** to **guidance**
**Help** to **Guidance**
**helper** to **guide**
**Helper** to **Guide**
Что нам нужно:
Скрипт, который проверяет файл на: word1 , слово2 , слово3 и слово4 .
Если слово существует в строке , скопировать эту строку в отдельный файл.
После того, как все будет сделано, запустить поиск и замену для word1, word2 и т. Д. В новом файле.
Например, у нас есть файл (file1.txt) со всеми переменными и их содержимым:
admin.help_text = help
admin.Help_text = Help
home.faq_title = FAQ
home.something.help = If you need help please send us email on...
При запуске скрипта он проверяет:
word1 = help
word2 = Help
И сохраняет найденные строки в file2.txt
admin.help_text = help
admin.Help_text = Help
home.something.help = If you need help please send us email on...
Затем сценарий проверяет file2.txt и изменяет help на guide и Help на Guidance
admin.help_text = guidance
admin.Help_text = Guidance
home.something.help = If you need guidance please send us email on...
После редактирования вопроса:
@Apoc Если количество шаблонов ограничено, вы можете выполнить шаги 1 и 2 с помощью этой команды:
awk -F'= ' '$2 ~ /word1|word2|word3|word4/' file1.txt > file2.txt
Для шага 3 это зависит от того, как вы хотите и должны это сделать
Я бы сделал что-то вроде:
В сценарии оболочки:
#!/bin/sh
# Loop through lines
cat file.txt | while read line; do
# Store variable part of the line
var=`echo $line | sed -r 's/^[^=][ ]?(.*)$/\1/'`
# Make the modification you want on var
# ...
# Print in temporary file the modified line
echo $line | sed -r 's/^([^=])/\1 ${var}/' >> temporary_file.txt
done
# Replace file by temporary one
mv temporary_file.txt file.txt
Из комментариев к ответу Эстебана окончательный ответ был следующим:
awk -F'=' '$2 ~ /word1|word2|word3|word4/' file1.txt > file2.txt