我需要格式化一个文本文件(Fortran 源代码)并将一些关键字从小写字母更改为大写字母,反之亦然。我创建了一系列可能的关键字,并编写了以下脚本:
for ((i=0; i<$nwords; i++ )); do
word=${words[$i]}
small=${word,,}
cap=${word^^}
sed -i "s/$small/$cap/gI" $filein
done
它按其应有的方式工作。问题如下:
假设关键字之一是“use”,并且在测试中的某处我有一个单词“uselog”。该脚本将其更改为“USERlog”,无论如何我想避免它。我的想法是在关键字中添加空格,但不知何故它们会自动修剪。我的意思是,我尝试“使用”或“使用”而不是“使用”,但结果是相同的。
我想一定有一种简单的方法可以做到这一点,比如使用引号、括号或类似的方法,但到目前为止我还没有找到。也欢迎其他替代方案。
答案1
与GNU sed
你可以使用单词边界\b
匹配单词边界;也就是说,如果左边的字符是“单词”字符,右边的字符是“非单词”字符,则它匹配,反之亦然。
sed 's/\bword\b/newword/g' file.txt
只是为了输入space
关键字:
sed 's/\sword\s/ newword /g' file.txt
请注意纽沃德每边各有一个空格。