【问题标题】:sed not replacing characters in Bash scriptsed 不替换 Bash 脚本中的字符
【发布时间】:2017-09-06 03:27:41
【问题描述】:

我正在尝试编写一个 shell 脚本来替换每个不是大写字母的字符。第一个参数是一个字符(这将替换其他参数),而其他参数是文件名。当我在终端中尝试 Sed 命令时,它工作得很好,但是在我的脚本中,它只是打印出每一行,除了那些以给定字符开头的行。 (我想要标准输出上的结果。)

for i in "${@:2}"
do
   if [ -f $i ]
   then
      sed "s/[^A-Z]/${1}/g" $i
   else
      echo "$i does not exist"
   fi
done

【问题讨论】:

  • 您发布的脚本不可能像您所说的那样运行。还有一些与该脚本内容无关的事情发生。
  • 我再次检查了它,它可以正常工作。谢谢大家的帮助,也很抱歉浪费了大家的时间。

标签: linux bash shell sed character


【解决方案1】:

我使用 f1,f2,f3 检查了你的脚本,内容相同,你确定它不起作用吗?

line1 Something Something Something
line2 Something Something Something
line3 Something Something Something

./input_test.sh x f1 f2 f3
xxxxxxSxxxxxxxxxSxxxxxxxxxSxxxxxxxx
xxxxxxSxxxxxxxxxSxxxxxxxxxSxxxxxxxx
xxxxxxSxxxxxxxxxSxxxxxxxxxSxxxxxxxx
xxxxxxSxxxxxxxxxSxxxxxxxxxSxxxxxxxx
xxxxxxSxxxxxxxxxSxxxxxxxxxSxxxxxxxx
xxxxxxSxxxxxxxxxSxxxxxxxxxSxxxxxxxx
xxxxxxSxxxxxxxxxSxxxxxxxxxSxxxxxxxx
xxxxxxSxxxxxxxxxSxxxxxxxxxSxxxxxxxx
xxxxxxSxxxxxxxxxSxxxxxxxxxSxxxxxxxx

【讨论】:

    【解决方案2】:

    你可以尝试替换:

    sed "s/[^A-Z]/${1}/g" $i
    

    作者:

    sed -e "s/[^A-Z]/${1}/g" $i
    

    要将每个字母替换为大写,您可以这样做:

    sed -e 's/\(.*\)/\U\1/' $i
    

    【讨论】:

    • 不幸的是,它没有帮助。
    • 对不起,我没有正确阅读问题;我会删除我的答案!
    • 不,还是什么都没有。
    猜你喜欢
    • 2022-07-21
    • 2010-11-29
    • 1970-01-01
    • 1970-01-01
    • 2011-08-28
    • 1970-01-01
    • 1970-01-01
    • 2014-07-30
    • 2021-09-29
    相关资源
    最近更新 更多