2

我有一个定制的工具,它使用 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'

当我得到输出时:name"|"lastname"|"address"|"telephone"|"age"|"other info"|"other info

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

4

3 回答 3

4

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

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

^字符锚搜索到行首,$字符锚搜索到行尾。

IHTH

于 2012-09-19T12:06:22.783 回答
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"
于 2012-09-19T12:09:45.013 回答
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"
于 2012-09-19T12:17:51.217 回答