用换行符替换字符组

时间:2020-10-19 10:35:06

标签: unix sed text-processing

我的文件中有一行', ',我想用new line代替

输入:

['siteed01pg|10.229.16.153|10.229.0.0|19|test / crt|BACKUP_MUT_SD  Vlan981 (PVLAN 1981)  New Backup Subnet #1  (site SD)', 'siteed01pg|10.129.135.53|10.129.135.0|26|test / crt|Fmer  bopreprodback  Vlan 754', '
[...]

我的sed命令:

sed "s/\', \'/\n/g"

输出:

['siteed01pg|10.229.16.153|10.229.0.0|19|test / crt|BACKUP_MUT_SD  Vlan981 (PVLAN 1981)  New Backup Subnet #1  (site SD)nsiteed01pg|10.129.135.53|10.129.135.0|26|test / crt|Fmer  bopreprodback  Vlan 754n

在我的输出中,换行符已替换为字符n 为什么?

1 个答案:

答案 0 :(得分:0)

您可以像这样使用sed来替换\n

sed "s/', '/"$'\\\n'"/g" file

在这里,我们使用$'\n'在替换中使用换行符。我们最终使用了“ $'\\ n'due to use of double quotes around sed`命令。

根据man bash

$'string'形式的单词经过特殊处理。该单词扩展为字符串,并按ANSI C标准的规定替换了反斜杠转义的字符

否则使用多行sed

sed "s/', '/\\
/g" file

这将同时适用于bash上的gnu和POSIX sed版本。

PS:如果您使用的是gnu sed,那么一个简化的命令将是:

sed "s/', '/\n/g" file
['siteed01pg|10.229.16.153|10.229.0.0|19|test / crt|BACKUP_MUT_SD  Vlan981 (PVLAN 1981)  New Backup Subnet #1  (site SD)
siteed01pg|10.129.135.53|10.129.135.0|26|test / crt|Fmer  bopreprodback  Vlan 754

[...]