使用awk或sed在文本文件中的两个字符之间插入空格

时间:2017-01-10 20:25:14

标签: shell unix text awk sed

我有以下文本文件:

20170110 120000
'Location    '  67.57-164.07      30.0   3.78 128.6   0.00 270.0

现在我想要的是在67.57和-164.07之间插入一个空格,以便文本文件现在看起来像:

20170110 120000
'Location    '  67.57 -164.07      30.0   3.78 128.6   0.00 270.0

我知道我可以使用awk或sed命令查看有关此信息,但可用信息含糊不清,并不具体到我要查找的内容。您对我能做些什么来获得理想的结果有什么建议吗?

4 个答案:

答案 0 :(得分:2)

使用sed:

在每个-前面添加空格,而不是空格
$ sed 's/\([^[:blank:]a-z]\)-/\1 -/g' file
20170110 120000
'Location-aware    '  67.57 -164.07      30.0   3.78 128.6   0.00 270.0

修改:将[^ ]更改为[^[:blank:]a-z]以获取@ Neron-Le-Velu的建议; D.

答案 1 :(得分:1)

在第一个-之前添加空格:

sed "s/-/ &/" file

答案 2 :(得分:1)

sed 's/^\('[^']*[[:blank:]]*\.[0-9]\{1,2\}\)-/\1 -/' YourFile

假设要在带引号的字符串之后的第一个数字之后插入空格,该字符串至少有一个十进制值,后面紧跟一个“ - ”

不知道价值和格式太懒,不允许进行特定修改,你应该假设一些(比如“字段”大小,字段格式......)

答案 3 :(得分:0)

这是awk中的一小部分。但它只适用于您的特殊情况,因为这个衬里有一个固定值。

'NR==2{gsub("-164.07"," -164.07")}{ print}' your_file