【问题标题】:Change a letter in a file to uppercase in Shell script在Shell脚本中将文件中的字母更改为大写
【发布时间】:2021-03-27 15:21:56
【问题描述】:

我正在尝试将文件中的特定给定字母更改为大写,但我不知道该怎么做。该文件已存在,我想执行以下操作

cat merry.txt 
I wish you a Merry Christmas

将 e 更改为 E,这样输出将是

cat merry.txt
I wish you a MErry Christmas

谢谢大家

【问题讨论】:

标签: linux shell ubuntu-20.04


【解决方案1】:

您可以使用tr 将一个字符“翻译”为另一个字符:

tr 'e' 'E' < file > newfile && mv newfile file

也可以使用awk(这里使用的是动态方式):

find='e'
replace='E'
awk -v f="$find" -v r="$replace" '{gsub(f, r)}1' file > newfile && mv newfile file

使用 GNU sed,您可以使用

sed -i 'y/e/E/' file

在所有这些情况下,您将文件中的任何地方的e 替换为E,并将更新后文件的内容保存在相同的文件名下。

查看sample demo online

#!/bin/bash
s='I wish them a Merry Christmas'
find='e'
replace='E'
tr "$find" "$replace" <<< "$s"
awk -v f="$find" -v r="$replace" '{gsub(f, r)}1' <<< "$s"
sed 'y/e/E/' <<< "$s"

输出:I wish thEm a MErry Christmas

【讨论】:

    【解决方案2】:

    试试这个:

    sed 's/e/E/' merry.txt
    

    如果您的文本在一行中包含多次出现的“e”,则前面的 sed 将 已将每行的第一个匹配项更改为“E”。通过附加全局选项 g到s命令的末尾,可以保证一行中多次出现的字符串会被改变。

    尝试使用这个:

    sed 's/e/E/g' merry.txt
    

    此命令将所有e 转换为E

    或者可以使用:

    sed -i 's/e/E/g' merry.txt
    

    【讨论】:

      【解决方案3】:

      像这样:

      sed 's/e/\Ue/' Input_File
      

      要永久编辑,请添加-i 开关:

      sed -i ... 
      

      【讨论】:

      • 非常感谢。你知道它是否适用于传递给 myshell 的第一个命令行参数,例如我创建了一个名为 upper 的脚本并执行它。/upper e
      • 当然,为什么不呢?这里感谢的方式是接受答案/投票答案。
      • 感谢您的帮助
      • 抱歉,我尝试使用 (./upper e) sed 's/$1/\U($1)/g' filename.txt 但它不起作用
      • 正是几分钟前有人遇到的问题,请参阅引用问题stackoverflow.com/a/65331815/465183
      猜你喜欢
      • 1970-01-01
      • 2023-04-05
      • 2023-03-22
      • 2019-10-01
      • 2015-08-03
      • 1970-01-01
      • 2012-04-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多