如何使用分隔符分隔文本文件中的字段

时间:2017-12-07 14:25:49

标签: unix sed

我有一个场景,我有一个文本文件,我想将文本文件中的行值与特定的分隔符(例如:)分开。

我通过将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

4 个答案:

答案 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
  • no need to use cat,许多cli工具接受stdin和文件输入
  • [[:blank:]]匹配空格和制表符,如果您知道只有空格字符,请使用文字空间
  • +要匹配一个或多个空白字符,请注意使用-E选项启用ERE。某些sed版本可能仅支持-r而非-E
    • 如果ERE不可用,请使用sed 's/[[:blank:]]\{1,\}/&:/g'
  • 替换部分中的
  • &指的是整个匹配的字符串