仅当有4个单词仅使用sed时,才将第一个单词与自身交换3次

问题描述 投票:3回答:2

嗨,我只是尝试使用sed命令解决问题,而不使用管道。但我可以将sed命令的结果传递给文件或从文件中读取。 EX:

sed s/dog/cat/ >| tmp 
or
sed s/dog/cat/ < tmp

不管怎么说我有一个文件F1,其内容是:

Hello hi 123
if a equals b
you
one abc two three four
dany uri four 123

输出应该是:

if if if a equals b
dany dany dany uri four 123

说明:程序必须只打印具有4个单词的行,并且在打印时必须打印行的第一个单词3次。

我试过这样的命令:

sed '/[^ ]*.[^ ]*.[^ ]*/s/[^ ]\+/& & &/' F1

要么

sed 's/[^ ]\+/& & &/' F1

但我无法弄清楚我怎么能用sed计算出一行中只有4个单词。任何帮助将不胜感激

linux unix sed
2个回答
4
投票
$ sed -En 's/^([^[:space:]]+)([[:space:]]+[^[:space:]]+){3}$/\1 \1 &/p' file
if if if a equals b
dany dany dany uri four 123

以上使用了一个支持带有-E选项的ERE的sed,例如: GNU和OSX seds)。


1
投票

如果字段是制表符分隔的

sed 'h;s/[^[:blank:]]//g;s/[[:blank:]]\{3\}//;/^$/!d;x;s/\([^[:blank:]]*[[:blank:]]\)/\1\1\1/' infile
© www.soinside.com 2019 - 2024. All rights reserved.