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

时间:2012-09-19 12:03:34

标签: bash sed

我有一个自定义工具,使用SAX解析XML文件并将它们再现为管道分隔值,一行示例如下:

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

我想重写每一行,我将使用bash脚本执行此操作,但我遇到了一些困难。 基本上我想在引号之间设置每个单词,上面一行的例子是:

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

我正在尝试使用sed这样做,并且我使用此sed行部分成功

sed 's:|:"|":g'

因为我得到了输出: 姓名“|”姓氏“|”地址“|”电话“|”年龄“|”其他信息“|”其他信息

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

3 个答案:

答案 0 :(得分:4)

你肯定是在正确的轨道上,以下是如何涵盖行首,行尾的特殊情况:

 sed 's:|:"|":g;s/^/"/;s/$/"/'

^ char anchors搜索到行首,$ char锚点搜索行尾。

IHTH

答案 1 :(得分:3)

line='name|lastname|address|telephone|age|other info|other info'

echo $line| sed -e 's/|/"|"/g' -e 's/^/"/' -e 's/$/"/'

给出:

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

答案 2 :(得分:2)

使用GNU awk的一种方式:

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

结果:

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