我需要制作一个 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,字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 并更改帮助到指导和 帮助到指导
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