【问题标题】:inserting space between two characters in a text file with awk or sed使用 awk 或 sed 在文本文件中的两个字符之间插入空格
【发布时间】:2017-05-25 11:14:42
【问题描述】:

我有以下文本文件:

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 命令,并查看了这方面的信息,但可用的信息含糊不清,并不特定于我要查找的内容。您对我可以做些什么来获得理想的结果有什么建议吗?

【问题讨论】:

  • 输入文件标签是分开的吗?

标签: shell unix text awk sed


【解决方案1】:

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

sed "s/-/ &/" file

【讨论】:

    【解决方案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 的建议。

    【讨论】:

    • 像您的方法一样,可能通过[:blank:] 更改空格并排除带引号的字符串以避免在圣路易斯出现空白:-) +1
    • [:blankety:][:blank:][:blanking:] St-Louis!我会努力尝试...
    • @NeronLeVelu 完成。
    【解决方案3】:

    这是 awk 中的一些小片段。但这仅适用于您的特殊情况,因为在这一行中有一个固定值。

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

    【讨论】:

    • JFS31,我认为您的命令格式不正确,这里没有什么意义。 i- NR=2,我们应该像 NR==2 那样做(因为 = 是赋值运算符而不是条件运算符) ii- 将 (-164.07"}{ ) 更改为 (-164.07");) 否则会出现语法错误。
    • 好的,谢谢您的建议。支架肯定不见了。我会改变的。
    【解决方案4】:
    sed 's/^\('[^']*[[:blank:]]*\.[0-9]\{1,2\}\)-/\1 -/' YourFile
    

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

    不知道值和格式懒得具体修改,你应该假设一些(比如“字段”大小,字段格式,...)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-11-10
      • 2022-06-10
      • 1970-01-01
      • 2011-03-28
      • 2012-11-03
      • 1970-01-01
      • 2015-07-15
      相关资源
      最近更新 更多