enter image description here

你好!

正如标题中所说,我需要删除只由一个白色间隔到两条线的白色间隔,正如您在图像中看到的,有一条绿线的白色间隔是我需要删除的,但多个带红线的白色间隔,我不想删除它们,那些带有绿线的,只被一个白色间隔分隔,我不知道是否可以使用AWK或SED或CUT,问题是我不知道如何做,谢谢您的帮助.

我试着用SED和AWK这样做,如下所示,但没有产生任何效果

awk -F, '{gsub("\n","",$1); print}' archivo.txt

sed 's/ //g' input.txt > no-spaces.txt

推荐答案

结论:

  • 输入文件有"\n"(不是"\r\n")行结尾.
  • 非空行至少包含两个字符.
  • 我们不必关心开头或结尾的空行 文件的内容.

支持-z(Slurp)选项和\n表示法的IF GNU sed为 可用.请你试一试:

sed -Ez "s/([^\n]\n)\n([^\n])/\1\2/g" input.txt > no-spaces.txt

input.txt人的例子:

line1
line2 # following blank line should be removed

line3 # following blank lines should be kept



line4

输出:

line1
line2 # following blank line should be removed
line3 # following blank lines should be kept



line4

Sed通常逐行处理输入.这就是为什么我们不能处理 跨多行的输入.-z选项通过以下方式更改行为 将输入行分隔符设置为NUL字符.

  • ([^\n]\n)匹配非空行的最后一个字符.将\1设置为备份 KReference.
  • \n是中间的空行(要删除).
  • ([^\n])匹配后面非空行的第一个字符.\2是 设置为反向引用.

顺便提一下,在bash的帮助下,以下内容将适用于任何符合POSIX标准的SED:

#!/bin/bash

# define newline character for replacement
NL=$'\\\n'

sed -E '
:l
N
$!b l
# first slurp all lines in the pattern space
# and perform the replacements over the lines
s/([^'"$NL"']'"$NL"')'"$NL"'([^'"$NL"'])/\1\2/g
' input.txt > no-spaces.txt

Linux相关问答推荐

是否可以在Bash正则表达式中排除?

在同一目录中未检测到G++预编译头

在Linux中随机化txt文件但保证不重复行

在 Bash 中使用 shell 脚本从文件中解析版本号

Git在某些文件中添加回车符,尽管autocrlf已关闭

在具有不同文件类型的文件夹中编辑多个 xml 文件 - 使用预定顺序

在 cURL 中使用的确切位置将字节分成一些范围部分

为什么`__vfprintf_internal`(`stdio.h`中的`printfn`)强制`$rbp`在我的x86-64机器上向前跳转6313864字节?

Azure Nvidia 中的 apt-update 给出公钥错误

函数在 shell 脚本中抛出错误语法错误:} unexpected

如何使用 GDB 和 QEMU 调试 Linux 内核?

在没有root访问权限的情况下安装zsh?

隐藏文件 .env 未使用 Docker COPY 复制

如何优雅地退出 X11 事件循环?

在 Node.JS 中引用相对于应用程序根目录的文件的正确方法

nvm:无法卸载当前活动的 node 版本

如何列出附加到Linux中共享内存段的进程?

如何将文件夹中的文件列表发送到Linux中的txt文件

UNIX `time` 命令对于基准测试是否足够准确?

如何处理以连字符 (-) 字符开头的文件名?