Поиск слов после определенного символа в строке

Мне нужно создать сценарий 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**

Что нам нужно:

  1. Скрипт, который проверяет файл на: word1 , слово2 , слово3 и слово4 .

  2. Если слово существует в строке , скопировать эту строку в отдельный файл.

  3. После того, как все будет сделано, запустить поиск и замену для 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...
0
21.11.2018, 10:27
2 ответа

После редактирования вопроса:

@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
1
28.01.2020, 04:46

Из комментариев к ответу Эстебана окончательный ответ был следующим:

awk -F'=' '$2 ~ /word1|word2|word3|word4/' file1.txt > file2.txt
-1
28.01.2020, 04:46

Теги

Похожие вопросы