如何区分有和没有结束/开始空格的字符串?

如何区分有和没有结束/开始空格的字符串?

我需要格式化一个文本文件(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

请注意纽沃德每边各有一个空格。

相关内容