Bash 使用sed向管道分隔线插入引号

Bash 使用sed向管道分隔线插入引号,bash,sed,Bash,Sed,我有一个定制的工具,可以使用SAX解析XML文件,并将其复制为管道分隔的值,例如: name|lastname|address|telephone|age|other info|other info "name"|"lastname"|"address"|"telephone"|"age"|"other info"|"other info" 我想重写每一行,我将使用bash脚本来完成,但我遇到了一些困难。 基本上,我想在引号之间设置每个单词,上面一行的示例如下: name|lastname|

我有一个定制的工具,可以使用SAX解析XML文件,并将其复制为管道分隔的值,例如:

name|lastname|address|telephone|age|other info|other info
"name"|"lastname"|"address"|"telephone"|"age"|"other info"|"other info"
我想重写每一行,我将使用bash脚本来完成,但我遇到了一些困难。 基本上,我想在引号之间设置每个单词,上面一行的示例如下:

name|lastname|address|telephone|age|other info|other info
"name"|"lastname"|"address"|"telephone"|"age"|"other info"|"other info"
我正在尝试使用sed来实现这一点,我在这条sed线路上取得了部分成功

sed 's:|:"|":g'
当我得到输出时: 姓名“|”姓氏“|”地址“|”电话“|”年龄“|”其他信息“|”其他信息

但是我不知道如何为第一个字符和最后一个字符设置引号,
有什么建议吗?

你的思路肯定是对的,以下是如何涵盖线开始、线结束的特殊情况:

 sed 's:|:"|":g;s/^/"/;s/$/"/'
^
字符定位搜索到行首,
$
字符定位搜索在行尾

IHTH

给出:

"name"|"lastname"|"address"|"telephone"|"age"|"other info"|"other info"

单向使用
GNU awk

awk 'BEGIN { FS=OFS="|"; Q="\"" } { for (i=1; i<=NF; i++) $i = Q $i Q }1'

它可以简单一点:
{for(i=1;i)如果任何字段包含双引号,您该怎么办?