【问题标题】:one space remains but more than 1 spaces removed in linux在linux中保留一个空格但删除了1个以上的空格
【发布时间】:2021-02-02 22:14:23
【问题描述】:

我的文本文件中有以下值:

, 2,

,                2,

我想改变它,好像有多个空格退出删除了值,但是对于一个空格,值仍然存在:

, 2,

还有第二个要删除的。 有人知道吗?我有以下代码,此代码不考虑一个空格或多个空格。

BEGIN{
  RS="^$"
}
{
  gsub(/[[:space:]]+[2]+,/,"")
  gsub(/[[:space:]]+[3]+,/,"")
  $1=$1
}
1

【问题讨论】:

  • 这里的一些信息:RS="^$" 很可能被 RS="" 替换。这是一个特殊的RS,表示将一系列空行视为记录分隔符。

标签: linux awk replace command-line command


【解决方案1】:

使用更简单的 awk(注意 / /: 之间的 2 个空格:

awk 'NF && !/  /' file

否则:

awk 'NF && !/[[:blank:]]{2}/' file
, 2,

我们正在检查一个条件是NF && !/ /,这意味着如果它是一个非空行并且该行中的任何地方都不存在双空格,则打印。

【讨论】:

  • 请注意,上述命令中/ /之间有两个空格。
  • 是的。可能我应该使用/[[:blank:]]{2}/ 让它更显眼
【解决方案2】:

要打印多于一个空格的行,请使用:

$ awk 'gsub(/ /," ")<=1' file

输出:

, 2,

注意空记录。

【讨论】:

    【解决方案3】:

    根据显示的示例,您能否尝试以下操作。这将只打印那些从 , 开始的行,然后是 1 个空格,后跟 1 个或多个数字,然后是 ,

    awk '/^, [0-9]+,$/' Input_file
    

    【讨论】:

      【解决方案4】:
      # retain lines with exactly one space character
      awk -F'[ ]' 'NF==2'
      
      # retain lines with maximum of one space character
      awk -F'[ ]' 'NF<=2'
      

      注意输入字段分隔符是在字符类中分配的。默认FS 是单个空格,它将根据这三个字符的一个或多个连续出现来删除前导/尾随空格/制表符/换行符和拆分。


      编辑:再读一遍问题不是很清楚。也许您想将多个空格替换为单个空格?

      $ sed -E 's/ +/ /g' ip.txt
      , 2,
      
      , 2,
      

      【讨论】:

        猜你喜欢
        • 2021-03-10
        • 1970-01-01
        • 1970-01-01
        • 2014-12-11
        • 2019-05-08
        • 1970-01-01
        • 1970-01-01
        • 2014-08-22
        • 1970-01-01
        相关资源
        最近更新 更多