如何从选定的行中删除空格

war*_*zek 3 linux text-processing

我在 Linux 中从我的文件中删除选定行中的空格时遇到了一个小问题。

例如:

f h t s q e g h c h t
f h t r f h v f d g n
q a z x s w e d c v f
f h b c h t h b v h f
p l k o i j u h y g t
t f r d c v b h n j u
Run Code Online (Sandbox Code Playgroud)

现在,我应该如何从第 2、4 和 5 行中删除空格?此外,它将如何寻找第三行?

Joh*_*024 6

使用 awk

要从第 2、4 和 5 行中删除空格:

$ awk 'NR==2 || NR==4 || NR==5 {gsub(/ /,"");} 1' file 
f h t s q e g h c h t
fhtrfhvfdgn
q a z x s w e d c v f
fhbchthbvhf
plkoijuhygt
t f r d c v b h n j u
Run Code Online (Sandbox Code Playgroud)

在 awk 中,NR是行号。逻辑表达式NR==2 || NR==4 || NR==5选择您感兴趣的行。该命令gsub(/ /,"")从这些行中删除空白。条件1是 awk 用于打印该行的神秘简写。

使用 sed

要从第 2、4 和 5 行中删除空格:

$ sed '3n; 2,5 s/ //g' file 
f h t s q e g h c h t
fhtrfhvfdgn
q a z x s w e d c v f
fhbchthbvhf
plkoijuhygt
t f r d c v b h n j u
Run Code Online (Sandbox Code Playgroud)

在这里,我们使用略有不同的逻辑:我们将第 2 行到第 5 行除第 3 行之外的所有行都删除空白。其工作原理如下:表达式3n告诉 sed,当涉及到第 3 行时,将其打印并跳到下一行。否则,命令 `2,5 s/ //g 告诉 sed 从 2 到 5 的所有行中删除空格。

删除所有空格,而不仅仅是空格

awk 'NR==2 || NR==4 || NR==5 {gsub(/[[:space:]]/,"");} 1' file
Run Code Online (Sandbox Code Playgroud)

或者:

sed '3n; 2,5 s/[[:space:]]//g' file
Run Code Online (Sandbox Code Playgroud)


Cos*_*tas 5

其他变体 awk

awk 'NR~/^[245]$/{$1=$1}1' OFS='' file
Run Code Online (Sandbox Code Playgroud)