【问题标题】:Text replacement bash script文本替换 bash 脚本
【发布时间】:2014-02-16 12:35:10
【问题描述】:

我想将a' 替换为à,将e' 替换为è 等,使用如下脚本替换为文件:

#!/bin/sh
if [ -e "$1" ]
then
  sed  's/a'/\à/g' -i "$1";
  sed  's/e'/\è/g' -i "$1";
  sed  's/i'/\ì/g' -i "$1";
  sed  's/o'/\ò/g' -i "$1";
  sed  's/u'/\ù/g' -i "$1";
else
  echo "File not found!"
fi

但我收到此错误:

Syntax error: Unterminated quoted string

我不知道怎么写'

【问题讨论】:

    标签: bash shell replace substitution


    【解决方案1】:

    是的,有语法问题,试试你的 sed 命令:

    sed -i "s/a'/à/g" "$1"
    sed -i "s/e'/è/g" "$1"
    sed -i "s/i'/ì/g" "$1"
    sed -i "s/o'/ò/g" "$1"
    sed -i "s/u'/ù/g" "$1"
    

    问题是您使用的是嵌套单引号(代码中的引号)。

    【讨论】:

    • 但是使用此代码我将a 更改为à 而不是a' 更改为à
    【解决方案2】:

    退出单引号,然后放一个转义引号,然后开始另一个单引号字符串:

    sed  's/a'\''/\à/g' -i "$1"
    

    【讨论】:

      【解决方案3】:
      awk '{ gsub(/e'\''/,"è"); print}' "$1"
      

      【讨论】:

      • 同样的修复也适用于sed。没有理由在这里用awk 替换完美的sed 命令。
      • 但是我没有替换任何人的 SED 命令。我认为无论请求者以何种方式受益,都可以独立发布您的答案。如果你喜欢,你可以删除我的答案。我没有任何问题。
      【解决方案4】:

      bash 中提供的另一种解决方案是 $'...' 引用,它允许转义单引号:

      sed  $'s/a\'/\à/g' -i "$1";
      

      【讨论】:

        猜你喜欢
        • 2017-03-10
        • 1970-01-01
        • 1970-01-01
        • 2021-09-29
        • 1970-01-01
        • 1970-01-01
        • 2013-04-30
        • 1970-01-01
        • 2020-04-24
        相关资源
        最近更新 更多