我有一个自定义工具,使用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'
因为我得到了输出: 姓名“|”姓氏“|”地址“|”电话“|”年龄“|”其他信息“|”其他信息
但我不知道如何设置第一个字符和最后一个字符的引号, 有什么建议吗?
答案 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"