bash中的sed或awk用于格式化输入列表>;输出列表和转义特殊字符

bash中的sed或awk用于格式化输入列表>;输出列表和转义特殊字符,bash,awk,sed,Bash,Awk,Sed,希望有人能帮助我使用sed/awk管道,我可以在bash中使用它来获取这样的输入列表 Battleztar Bazinga com.plumanalytics ECCP/1.0 Go!Zilla GT::WWW MegaIndex.ru MS Web Services Client POE-Component-Client-HTTP Battleztar\ Bazinga com\.plumanalytics ECCP\/1\.0 Go\!Zilla GT\:\:WWW MegaIndex\.

希望有人能帮助我使用sed/awk管道,我可以在bash中使用它来获取这样的输入列表

Battleztar Bazinga
com.plumanalytics
ECCP/1.0
Go!Zilla
GT::WWW
MegaIndex.ru
MS Web Services Client
POE-Component-Client-HTTP
Battleztar\ Bazinga
com\.plumanalytics
ECCP\/1\.0
Go\!Zilla
GT\:\:WWW
MegaIndex\.ru
MS\ Web\ Services\ Client
POE\-Component\-Client\-HTTP
并给出这样的输出列表

Battleztar Bazinga
com.plumanalytics
ECCP/1.0
Go!Zilla
GT::WWW
MegaIndex.ru
MS Web Services Client
POE-Component-Client-HTTP
Battleztar\ Bazinga
com\.plumanalytics
ECCP\/1\.0
Go\!Zilla
GT\:\:WWW
MegaIndex\.ru
MS\ Web\ Services\ Client
POE\-Component\-Client\-HTTP

基本上,使用反斜杠转义所有特殊字符和空格
\

您可以使用此
sed

sed 's/[^[:alnum:]_]/\\&/g' file

Battleztar\ Bazinga
com\.plumanalytics
ECCP\/1\.0
Go\!Zilla
GT\:\:WWW
MegaIndex\.ru
MS\ Web\ Services\ Client
POE\-Component\-Client\-HTTP
  • 反括号表达式将匹配任何非字母数字和下划线的字符
  • 在替换中,
    \\&
    将把
    \
    放在匹配文本之前

您可以使用此
sed

sed 's/[^[:alnum:]_]/\\&/g' file

Battleztar\ Bazinga
com\.plumanalytics
ECCP\/1\.0
Go\!Zilla
GT\:\:WWW
MegaIndex\.ru
MS\ Web\ Services\ Client
POE\-Component\-Client\-HTTP
  • 反括号表达式将匹配任何非字母数字和下划线的字符
  • 在替换中,
    \\&
    将把
    \
    放在匹配文本之前
    • 使用
      awk

      awk 'gsub(/[^[:alnum:]]/,"\\\\&")+1' infile
      
      如果您有
      gawk
      ,则可以使用

      gawk -i inplace 'gsub(/[^[:alnum:]]/,"\\\\&")+1' infile 
      
      将修改原始文件

      在之前保留备份

      gawk -v INPLACE_SUFFIX=.bak -i inplace 'gsub(/[^[:alnum:]]/,"\\\\&")+1' infile 
      
      使用
      awk

      awk 'gsub(/[^[:alnum:]]/,"\\\\&")+1' infile
      
      如果您有
      gawk
      ,则可以使用

      gawk -i inplace 'gsub(/[^[:alnum:]]/,"\\\\&")+1' infile 
      
      将修改原始文件

      在之前保留备份

      gawk -v INPLACE_SUFFIX=.bak -i inplace 'gsub(/[^[:alnum:]]/,"\\\\&")+1' infile 
      


      我们的目标是添加一些自己的代码,以显示您自己为解决此问题所做的研究工作。谢谢Cyrus,我明白我应该这样做,今天我的脑袋真的一点也不舒服,病了一个星期了,所以现在真的在为最简单的事情奋斗。目标是你添加一些自己的代码,至少显示你自己为解决这个问题所做的研究工作。谢谢赛勒斯,我明白我应该这么做,今天我的头真的一点也不舒服,病了一个星期了,所以此刻我真的在为最简单的事情奋斗。这简直是神奇的,谢谢你。bash脚本中的最后一个命令行是
      cat input.txt | sed's/\\\//g'| sed's/[^[:alnum:][]/\\&/g'>inputmp.txt&&mv inputmp.txt output.txt
      非常感谢您的帮助。我额外使用sed管道的原因是,正在转换的输入文件中有
      \
      ,所以我首先将它们去掉。您可能可以这样做:
      sed's/\//g;s/[^[:alnum:][u]/\\&/g'input.txt>output.txt
      非常感谢,工作非常完美。你帮了我一个大忙,我欠你一个人情。真是不可思议,谢谢你。bash脚本中的最后一个命令行是
      cat input.txt | sed's/\\\//g'| sed's/[^[:alnum:][]/\\&/g'>inputmp.txt&&mv inputmp.txt output.txt
      非常感谢您的帮助。我额外使用sed管道的原因是,正在转换的输入文件中有
      \
      ,所以我首先将它们去掉。您可能可以这样做:
      sed's/\//g;s/[^[:alnum:][u]/\\&/g'input.txt>output.txt
      非常感谢,工作非常完美。你帮我节省了很多时间,我欠你一个人情。非常感谢,sed对我来说很有用,但我也需要开始学习awk和gawk,所以我也会测试这些,并开始学习新东西:)那太好了,继续学习,请记下,上面一个可以省去下划线(
      )、字符,如果你想排除,然后将其添加到括号中,当然
      sed
      对于查找和替换之类的任务更好,并且在当前上下文中,因此提供的解决方案最适合。我尝试了您的第一个awk
      awk'gsub(/[^[:alnum:]/,“\\\\&”)+1'infle
      但它是用空格
      Battleztar\\\Bazinga
      来做的,其他的一切都很完美,包括带下划线的那一个,我的列表中确实有一些下划线,只是需要解决空格的
      \\
      问题。非常感谢,sed对我很有用,但我也需要开始学习awk和gawk,所以我也将对这些进行测试,以便更好地学习新事物:)这很好,继续学习,请记下,上面一个转义下划线(
      )、字符,如果您想排除,请将其添加到括号中,当然,
      sed
      对于查找和替换之类的任务更好,并且在当前环境下,所以由提供的解决方案最适合。我尝试了您的第一个awk
      awk'gsub(/[^[:alnum:]/,“\\\\&”)+1'infle
      但它是用空格
      Battleztar\\\Bazinga
      来实现的,其他一切都很完美,包括带有下划线的空格,我的列表中确实有一些下划线,只是需要解决空格的
      \\
      问题。