如何在管道分隔的字段周围添加双引号 ("")
How to add double quotation marks ("") around pipe-separated fields
假设我有一个结构如下的文件:
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|
^
表示“一行的开头”。使用 [^|]
代替,意思是“除了 |
之外的任何东西”。如果您的 sed 实现支持 +
,您可以使用
sed -E 's/[^|]+/"&"/g'
否则,你需要更冗长
sed 's/[^|][^|]*/"&"/g'
&
表示匹配的部分。
您可以使用
sed -E 's/[^|]+/"&"/g' file > newfile
-E
选项启用 POSIX ERE 语法,因此 [^|]+
匹配除 |
之外的一个或多个字符,并且 "&"
将每个字符替换为它的副本两边都附有 "
。
参见 online sed
demo:
s='1|2|3|4|
5|6|7|8|
9|10|11|12|'
sed -E 's/[^|]+/"&"/g' <<< "$s"
输出:
"1"|"2"|"3"|"4"|
"5"|"6"|"7"|"8"|
"9"|"10"|"11"|"12"|
这里是 gnu awk
做同样事情的方法:
awk -v RS="[|\n]+" '{ORS=RT; print "\"" [=10=] "\""}' file
"1"|"2"|"3"|"4"|
"5"|"6"|"7"|"8"|
"9"|"10"|"11"|"12"|
假设我有一个结构如下的文件:
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|
^
表示“一行的开头”。使用 [^|]
代替,意思是“除了 |
之外的任何东西”。如果您的 sed 实现支持 +
,您可以使用
sed -E 's/[^|]+/"&"/g'
否则,你需要更冗长
sed 's/[^|][^|]*/"&"/g'
&
表示匹配的部分。
您可以使用
sed -E 's/[^|]+/"&"/g' file > newfile
-E
选项启用 POSIX ERE 语法,因此 [^|]+
匹配除 |
之外的一个或多个字符,并且 "&"
将每个字符替换为它的副本两边都附有 "
。
参见 online sed
demo:
s='1|2|3|4|
5|6|7|8|
9|10|11|12|'
sed -E 's/[^|]+/"&"/g' <<< "$s"
输出:
"1"|"2"|"3"|"4"|
"5"|"6"|"7"|"8"|
"9"|"10"|"11"|"12"|
这里是 gnu awk
做同样事情的方法:
awk -v RS="[|\n]+" '{ORS=RT; print "\"" [=10=] "\""}' file
"1"|"2"|"3"|"4"|
"5"|"6"|"7"|"8"|
"9"|"10"|"11"|"12"|