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

时间:2017-10-15 10:13:48

标签: 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\.ru
MS\ Web\ Services\ Client
POE\-Component\-Client\-HTTP

基本上使用反斜杠\

转义所有特殊字符和空格

2 个答案:

答案 0 :(得分:4)

您可以使用此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
  • 否定括号表达式[^[:alnum:]_]将匹配任何非字母数字和下划线的字符。
  • 替换\\&会在匹配的文字前放置\

答案 1 :(得分:2)

使用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