首页 > 解决方案 > 如何在管道分隔的字段周围添加双引号 ("")

问题描述

假设我有一个具有这种结构的文件:

1|2|3|4|
5|6|7|8|
9|10|11|12|

但是,我希望我的文件看起来像这样(预期输出):

"1"|"2"|"3"|"4"|
"5"|"6"|"7"|"8"|
"9"|"10"|"11"|"12"|

我正在尝试sed通过以下方式使用命令:

sed 's/^/"/g'

不幸的是,它只在每行的开头添加引号:

"1|2|3|4|
"5|6|7|8|
"9|10|11|12|

标签: bashsedcommand-line

解决方案


^意思是“一行的开始”。改用[^|]它的意思是“除了|”。如果您的 sed 实现支持+,您可以使用

sed -E 's/[^|]+/"&"/g'

否则,您需要更详细

sed  's/[^|][^|]*/"&"/g'

&表示匹配的部分。


推荐阅读