Replace 使用sed或awk将空格替换为第一个字

Replace 使用sed或awk将空格替换为第一个字,replace,awk,sed,Replace,Awk,Sed,我有这样一个字符串: qqqqq zzzz aaaa ttttt 77777 qqqqqzzzzqqqqqaaaaqqqqqtttttqqqqq77777 我需要用第一个单词替换空格。因此,它应该是这样的: qqqqq zzzz aaaa ttttt 77777 qqqqqzzzzqqqqqaaaaqqqqqtttttqqqqq77777 是否可以使用sed或awk执行此操作?此awk单行线将用第一个字段替换所有空格 awk '{OFS=$1;$1=$1}7' file 将产生: qq

我有这样一个字符串:

qqqqq zzzz aaaa ttttt 77777
qqqqqzzzzqqqqqaaaaqqqqqtttttqqqqq77777
我需要用第一个单词替换空格。因此,它应该是这样的:

qqqqq zzzz aaaa ttttt 77777
qqqqqzzzzqqqqqaaaaqqqqqtttttqqqqq77777

是否可以使用sed或awk执行此操作?

此awk单行线将用第一个字段替换所有空格

awk '{OFS=$1;$1=$1}7' file
将产生:

qqqqqqqqqqzzzzqqqqqaaaaqqqqqtttttqqqqq77777
更新: 此行将跳过第一个空格:

awk '{x=$1;sub(FS,"\x98");gsub(FS,x);sub("\x98","")}7' file
这可能适用于您(GNU-sed):

这将用第一个字替换第二个字后的第一个空格,然后删除第一个空格

可以这样写:

sed -r ':a;s/^((\S+) \S+) /\1\2/;ta;s/ //' file

为什么第一个空格没有被
qqqqq
替换?很好!我还考虑过使用
awk'{gsub(FS,$1)}1'文件
。@fedorqui您的awk行也很好。然而,这两条线之间有细微差别。如果有连续空格,我的将用一个
$1
替换它们,而你的将用一个
$1
替换它们。这不是对或错,只是区别。谢谢你的回答,但这不起作用。在我的例子中,我只出现了一次QQ。不止一次