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