如何删除选定行中的空格

如何删除选定行中的空格

我在 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

现在,我应该如何删除第 2、4 和 5 行中的空格?另外,如何寻找第三条线?

答案1

使用 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

在 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

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

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

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

或者:

sed '3n; 2,5 s/[[:space:]]//g' file

答案2

其他变体为awk

awk 'NR~/^[245]$/{$1=$1}1' OFS='' file

答案3

你可以用一个 shell 来做到这一点。在某些情况下甚至可能值得这样做。不过,可能不经常。

sh -fc  <in >out '
    for IFS do read -r l
        printf %s $l;echo
    done; exec cat
' -- '' \  '' \  \ 

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

答案4

有人需要正确地表示“tr”,并声明一个解决方案,所以这里是:

 tr -d [:space:]

或者

 tr -d [:blank:]

假设文本源是一个名为 ich 的文件:

 cat ich | tr -d [:space:]

这会产生一行,没有空格:

fhtsqeghchtfhtrfhvfdgnqazxswedcvffhbchthbvhfplkoijuhygttfrdcvbhnju

如果您希望保留这些行,请使用以下变体:

 cat ./ich | tr -d [:blank:]

产生这个输出(减去行之间的额外换行符)

弗赫茨克赫赫特

弗赫特弗赫弗德根

qazxswedcvf

超高频

普勒科尤赫格特

tfrdcvbhnju

各位尊敬的同行,你们的回答非常精彩!

F。

相关内容