【发布时间】:2019-05-28 09:46:39
【问题描述】:
我有一个sed命令如下:
sed -i 's/),(/),\n(/g' myfile
我的文件是这样的:
(237),(238)
预期结果是:
(237),
(238)
实际结果是:
(237),n(238)
我尝试了很多写新行的方法,但都失败了。是否有可能得到预期的结果?
我发现GNU sed 有效,但BSD sed 无效。
【问题讨论】:
我有一个sed命令如下:
sed -i 's/),(/),\n(/g' myfile
我的文件是这样的:
(237),(238)
预期结果是:
(237),
(238)
实际结果是:
(237),n(238)
我尝试了很多写新行的方法,但都失败了。是否有可能得到预期的结果?
我发现GNU sed 有效,但BSD sed 无效。
【问题讨论】:
对于BSD sed,我们可以将新行写成$'\n',所以命令应该是:
/usr/bin/sed 's/),(/),\'$'\n''(/g' myfile
【讨论】:
这可能对你有用:
sed -e 'G' -e 's/,\(.*\)\(.\)/,\2\1/' file
G 命令会将保持空间附加到模式空间,这实际上将在保持空间为空时附加一个换行符。模式匹配可以将其重新排列为所需的结果。
【讨论】: