enter image description here
你好!
正如标题中所说,我需要删除仅由两行白色间距分隔的白色间距,正如您在图像中看到的,具有绿色线条的白色间距是我需要删除的,但是具有红色线条的多个白色间距,我不想删除它们,具有绿色线条的白色间距仅由白色间距分隔,我不知道如果与AWK或SED或削减将工作,问题是,我不知道如何做到这一点,谢谢您的帮助。
我试着用SED和AWK做了如下操作,但没有产生任何效果
awk -F, '{gsub("\n","",$1); print}' archivo.txt
sed 's/ //g' input.txt > no-spaces.txt
字符串
3条答案
按热度按时间rxztt3cl1#
假设条件:
如果支持
-z
(slurp)选项和\n
表示法的GNU sed
可用。请尝试:字符串
input.txt
的例子:型
输出量:
型
Sed
通常逐行处理输入。这就是为什么我们不能跨多行处理输入的原因。-z
选项通过将输入行分隔符设置为NUL字符来更改行为。([^\n]\n)
匹配非空行的最后一个字符。\1
被设置为bac kreference。\n
是中间的空行(将被删除)。([^\n])
匹配以下非空行的第一个字符。\2
被设置为反向引用。顺便说一句,以下内容将在
bash
的帮助下与任何POSIX兼容的sed一起使用:型
neekobn82#
这可能对你有用(GNU sed):
字符串
打开3行窗口。
如果两个非空行夹着一个空行,则删除空行并保持3行窗口。
否则,打印/删除第一行并重复。
注意:
1N
确保创建3行窗口,替换后的N
同样确保这一点。xxls0lw83#
对于任何POSIX
awk
:字符串
如果当前行只包含空格(
/^[[:space:]]*$/
),则递增变量n
,将当前行存储在变量p
中,并移动到下一行(next
)。否则(当前行包含非空格字符),如果n==1
打印存储在变量p
中的前一个空行,则打印当前行并重置n
。注意:如果最后一行只包含空格,并且前面有一行包含非空格字符,则不会打印。如果必须打印,请尝试:
型
注意:如果只想删除空行,请将
^[[:space:]]*$/
替换为/^$/
。