在线查找特定符号后的单词

在线查找特定符号后的单词

我需要制作一个 bash 脚本来读取包含变量 = 文本的文件。我需要的是脚本检查文件,忽略变量名称并在 = 符号之后的文本中搜索单词。

例子

thread.give_respect.title = Give respect
thread.receive_respect.title = Gain respect
thread.profile_respect.title = Show my Respect

由于第一部分是可变的,我不需要这个词尊重被改变。只有 = 之后的一个 另外,如果可能的话,我想检查一下我想要更改的单词是否带有大写字母,以便我可以相应地更改它。

编辑:

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. 检查文件的脚本:字1,字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 并更改帮助指导帮助指导

admin.help_text = guidance
admin.Help_text = Guidance
home.something.help = If you need guidance please send us email on...

答案1

自问题编辑以来:

@Apoc如果模式数量有限,您可以使用以下命令执行步骤1和2:

awk -F'=' '$2 ~ /word1|word2|word3|word4/' file1.txt > file2.txt

对于第 3 步,这取决于您想要和必须如何做


我会做类似的事情:

  • 循环每一行
  • 检索变量部分
  • 进行您想要的修改
  • 将修改后的行打印到临时输出文件中
  • 将文件替换为临时文件

在 shell 脚本中:


#!/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

答案2

来自对埃斯特万的评论答案,最终使用的答案是:

awk -F'=' '$2 ~ /word1|word2|word3|word4/' file1.txt > file2.txt

相关内容