Bash 为什么在运行sed之后,我的文件中充满了extbar?

Bash 为什么在运行sed之后,我的文件中充满了extbar?,bash,sed,Bash,Sed,根据上的信息,我想准备一个用于上下文的文件。我需要做几个替换: sed -i 's/\&/\\\&/g' ./File.csv sed -i 's/\#/\\\#/g' ./File.csv sed -i 's/\%/\\\percent/g' ./File.csv sed -i 's/\|/\\\textbar/g' ./File.csv sed -i 's/\$/\\\textdollar/g' ./File.csv sed -i 's/\_/\\\textunderscor

根据上的信息,我想准备一个用于上下文的文件。我需要做几个替换:

sed -i 's/\&/\\\&/g' ./File.csv
sed -i 's/\#/\\\#/g' ./File.csv
sed -i 's/\%/\\\percent/g' ./File.csv
sed -i 's/\|/\\\textbar/g' ./File.csv
sed -i 's/\$/\\\textdollar/g' ./File.csv
sed -i 's/\_/\\\textunderscore/g' ./File.csv
sed -i 's/\~/\\\textasciitilde/g' ./File.csv
sed -i 's/\{/\\\textbraceleft/g' ./File.csv
sed -i 's/\}/\\\textbraceright/g' ./File.csv
  • 替换为
    \\\
  • %
    替换为
    \percent
  • |
    替换为
    \textbar
  • $
    替换为
    \textdolar
  • \text下划线
    替换
    \ucode>
  • ~
    替换为
    \textascitilde
  • {
    替换为
    \textraceleft
  • }
    替换为
    \textraceRight
我已尝试使用中的信息进行以下替换:

sed -i 's/\&/\\\&/g' ./File.csv
sed -i 's/\#/\\\#/g' ./File.csv
sed -i 's/\%/\\\percent/g' ./File.csv
sed -i 's/\|/\\\textbar/g' ./File.csv
sed -i 's/\$/\\\textdollar/g' ./File.csv
sed -i 's/\_/\\\textunderscore/g' ./File.csv
sed -i 's/\~/\\\textasciitilde/g' ./File.csv
sed -i 's/\{/\\\textbraceleft/g' ./File.csv
sed -i 's/\}/\\\textbraceright/g' ./File.csv
不幸的是,当我运行这些脚本时,整个文件都变成了一堆奇怪的字母、数字,到处都是单词“extbar”

  • 我怎样才能做这些替换品
  • 为什么在运行这些命令后,“extbar”出现在我的文件中

    • 这可能适合您:

      cat <<\!  >Village.sed
      s/&/\\&/g
      s/#/\\#/g
      s/%/\\percent/g
      s/|/\\textbar/g
      s/\$/\\textdollar/g
      s/_/\\textunderscore/g
      s/~/\\textasciitilde/g
      s/{/\\textbraceleft/g
      s/}/\\textbraceright/g
      !
      sed -f Village.sed ./File.csv
      

      这可能适合您:

      cat <<\!  >Village.sed
      s/&/\\&/g
      s/#/\\#/g
      s/%/\\percent/g
      s/|/\\textbar/g
      s/\$/\\textdollar/g
      s/_/\\textunderscore/g
      s/~/\\textasciitilde/g
      s/{/\\textbraceleft/g
      s/}/\\textbraceright/g
      !
      sed -f Village.sed ./File.csv
      

      使用四个反斜杠,而不是转义。它们被评估两次。下面是字符
      \t
      ,后面是字符串
      'extbar'
      (from\textbar)

      使用四个反斜杠代替转义符。它们被评估两次。接下来,替换字符为
      \t
      ,执行此操作时,后跟字符串
      'extbar'
      (from\textbar)

      sed -i 's/|/\\\textbar/g' ./File.csv
      sed reads it as s/|/\\\textbar/g  \\ becomes \ and \t becomes tab character.
      
      试一试

      当你这样做的时候

      sed -i 's/|/\\\textbar/g' ./File.csv
      sed reads it as s/|/\\\textbar/g  \\ becomes \ and \t becomes tab character.
      
      试一试