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

嗨,我试图解决一个只使用sed命令而不使用管道的问题。但是允许我将sed命令的结果传递给文件或从文件中读取te。
前任:

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个单词。
任何帮助都将不胜感激


最佳答案:

$ sed -En 's/^([^[:space:]]+)([[:space:]]+[^[:space:]]+){3}$/\1 \1 &/p' file
if if if a equals b
dany dany dany uri four 123

上面使用的sed支持带有-E选项的eres,例如gnu和osx seds)。

    公众号
    关注公众号订阅更多技术干货!