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

时间:2017-12-26 12:29:45

标签: linux unix sed

您好我正在尝试解决问题仅使用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个单词。 任何帮助将不胜感激

2 个答案:

答案 0 :(得分: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 :(得分:1)

如果字段是分隔符

sed 'h;s/[^[:blank:]]//g;s/[[:blank:]]\{3\}//;/^$/!d;x;s/\([^[:blank:]]*[[:blank:]]\)/\1\1\1/' infile