linux - 在文件中搜索单词并将其从小写转换为大写

标签 linux shell

我在一个 shell 脚本上工作,它从用户那里获取通配符并在当前工作目录下的 .txt 文件中搜索匹配的词(例如;通配符 ar* 查找文章、are 等)。当它找到单词时,它应该将它们从小写转换为大写(ARTICLE、ARE...)。

我生成了一个 while 循环来检查 .txt 文件中的所有单词,并生成了一个 for 循环来检查所有 .txt 文件。 while 循环逐字读取 .txt 文件。但是,它会找到所有与通配符完美匹配的单词;我无法将它们转换为大写。

....
while IFS= read -r word; do
    if [[ ${word,,} == ${string,,} ]] 
    then
        echo $word #to check the words          
        sed -i "s/${word}/${word^^}" $file                  
    fi
done

它完美地打印了所有单词,但没有将它们转换为文件中的大写字母,并给出了一个错误;

"sed: -e expression #1, char 15: unterminated `s' command"

最佳答案

您缺少 s/old/new/ 语句中的第二个 /。您还应该使用 g 修饰符来替换一行中的所有匹配项。

sed -i "s/${word}/${word^^}/g" $file

关于linux - 在文件中搜索单词并将其从小写转换为大写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58612506/

相关文章:

Linux 文件获取列与特定日期时间范围匹配的行

Linux如何对参数进行排序

windows - 窗口 shell 脚本返回码

bash - 将 shell 变量传递给 ssh

linux - Shell 脚本 - 日期/时间和用户列表

mysql - 使用 crontab 运行程序无法将非英文字符插入数据库

java - Gradle:使用依赖库创建不可执行的jar和可执行shell脚本,作为程序包分发

linux - 如何在 Linux 中创建自定义命令?

linux - 如何在 Linux 系统上安全地重新配置 gcc?

linux - 停止 Jenkins 的正确方法是什么(当独立执行 war 时)?