如何找到并替换\ n','

时间:2018-03-27 09:29:25

标签: linux bash text sed tr

我的文本文件中包含数字列,我需要将其转换为数字以'分隔的行,'

例如:

$ cat file.txt
1034008
1034043
10340431
1034051

然后我使用tr

tr "\n" "', '" < file.txt > file2.txt

但结果是:

$ cat file2.txt
1034008'1034043'10340431'1034051

那么,我需要做些什么来获得正确的结果呢?

3 个答案:

答案 0 :(得分:5)

tr只能进行一对一映射,而不是一对多

$ # convert all input lines to one line
$ # using , as separator, cannot give multiple character separator
$ paste -sd, ip.txt
1034008,1034043,10340431,1034051

$ # post process it
$ paste -sd, ip.txt | sed 's/,/, /g'
1034008, 1034043, 10340431, 1034051

$ # or use a tool that allows input record separator manipulation
$ perl -pe 's/\n/, / unless eof' ip.txt
1034008, 1034043, 10340431, 1034051

答案 1 :(得分:0)

1.我们可以通过sed做到这一点 sed的命令N可以将下一行读入模式空间。所以我们使用N将2行合并为1.但是如何将所有行合并为一个? 我们可以在开头设置一个lebel,并使用t label跳转到lebel进行循环。

$ sed ':myLebel;N;s/\n/, /; t myLebel; ' file.txt > file2.txt $ cat file2.txt 1034008, 1034043, 10340431, 1034051 2.在您的问题中,我们可以使用xargs将所有内容读入由空格分隔的一行,然后使用sed将空格替换为您想要的字符串。 $ cat file.txt | xargs |sed 's/ /, /g' > file2.txt $ cat file2.txt 1034008, 1034043, 10340431, 1034051

参见:
How the 'N' command works in sed?
https://www.thegeekstuff.com/2009/12/unix-sed-tutorial-6-examples-for-sed-branching-operation/

答案 2 :(得分:0)

纯粹的bash,以避免外部命令(更快)

tk="$(< file.txt)"
echo "${tk//$'\n'/, }" > file2.txt