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 行中删除空格?此外,它将如何寻找第三行?
要从第 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 用于打印该行的神秘简写。
要从第 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)