我有一个场景,我有一个文本文件,我想将文本文件中的行值与特定的分隔符(例如:
)分开。
我通过将SQL查询的输出存储到文本文件中来生成文本文件。
文本文件的内容是
field 1.2 xxxx
field 2.7.1 xxxx
field 1.9 xxxx
field 1.4 xxxx
field 2.7.1 xxxx
我试过了:
cat /tmp/file.txt | sed 's/ /:/g'
但由于行空间不一致,这对我不起作用。
我该怎么做? 我期待的输出是这样的
field :1.2 :xxxx
field :2.7.1 :xxxx
field :1.9 :xxxx
field :1.4 :xxxx
field :2.7.1 :xxxx
答案 0 :(得分:0)
空间 - 空间 - 星号。第一个空间说必须有一个,第二个用星号表示零或多个额外的东西。 sed 's/ */:/g'
答案 1 :(得分:0)
使用GNU sed,用冒号替换两个或多个空格:
sed -E 's/ {2,}/:/' file
或匹配一个或多个空格的第二个字符串:
sed -E 's/ +/:/2' file
答案 2 :(得分:0)
您可以使用tr
with its "squeeze" option:
$ tr -s ' ' : < input
field:1.2:xxxx
field:2.7.1:xxxx
field:1.9:xxxx
field:1.4:xxxx
field:2.7.1:xxxx
将任何重复空格序列压缩成一个空格,然后用冒号替换。
答案 3 :(得分:0)
$ sed -E 's/[[:blank:]]+/&:/g' /tmp/file.txt
field :1.2 :xxxx
field :2.7.1 :xxxx
field :1.9 :xxxx
field :1.4 :xxxx
field :2.7.1 :xxxx
[[:blank:]]
匹配空格和制表符,如果您知道只有空格字符,请使用文字空间+
要匹配一个或多个空白字符,请注意使用-E
选项启用ERE。某些sed
版本可能仅支持-r
而非-E
sed 's/[[:blank:]]\{1,\}/&:/g'
&
指的是整个匹配的字符串