在shell脚本中使用tr替换单引号的char

时间:2013-06-26 09:40:24

标签: shell unix tr

我想使用','命令在shell脚本中用tr替换新行char(\ n)(以及开始和结束单引号)。但是tr命令没有正确替换char

这是我使用的命令:

< 1.txt tr "\n" "','" 

此命令的输出:

erer'erer.'erer'erer'

文件1.txt就像:

erer
erer.
erer
erer

请建议我如何使用相同的命令完成此操作。

编辑问题

2 个答案:

答案 0 :(得分:3)

tr不是正确的工具,因为tr通过char转换而不是char来替换字符串。使用awk:

awk '{printf("'"'"'%s'"'"',", $0)} END{print ""}' 1.txt

要避免使用所有奇怪的双引号/单引号:

awk '{printf("\x27%s\x27,", $0)} END{print ""}' 1.txt

避免在最后一行后打印逗号:

awk '{a[cnt++]=$0} END{ for (i=0; i<length(a)-1; i++) printf("\x27%s\x27,", a[i]); 
      print a[i]}' 1.txt

答案 1 :(得分:2)

tr仅用于音译字符。你可以这样做:

$ seq 10 | sed "s/.*/'&'/" | paste -sd, -
'1','2','3','4','5','6','7','8','9','10'

或者,如果您不想要第一个和最后一个'

$ seq 10 | sed '$!G;$!G' | paste -sd "','" -
1','2','3','4','5','6','7','8','9','10