如何使用sed

时间:2018-01-01 16:37:23

标签: sed

需要复制机器模式中的最后一个单词

hi abd 123
hiabd 2 44
hi 12 233

输出应为:

hi abd 123 123 123
hiabd 2 44 44 44

这是我试过的:

sed  '/abd/!d' F1

但它并没有重复最后一个字。 我知道我可以用回溯做一些事情,但是它被误解了,请帮助我只能使用sed命令。

3 个答案:

答案 0 :(得分:1)

如果您需要awk解决方案,以下内容也可以帮助您。

awk '/abd/{print $0,$NF,$NF}'  Input_file

输出如下。

hi abd 123 123 123
hiabd 2 44 44 44

答案 1 :(得分:0)

使用GNU sed:

sed -n '/abd/ {s/\( [^ ]\+\)$/&\1\1/p}' file

sed -nE '/abd/{ s/( [^ ]+)$/&\1\1/p}' file

输出:

hi abd 123 123 123
hiabd 2 44 44 44

请参阅:Back-references and Subexpressions

答案 2 :(得分:0)

对于多样性,仅使用bash

while IFS= read -r line; do 
    [[ $line =~ abd ]] && echo "$line ${line##* } ${line##* }"
done < file

您可以选择其他character set作为单词分隔符,例如:

#space and tab are delimiters
${line##*[[:blank:]]}

#character 'a' and 'c' are delimiters
${line##*[ac]}

此外,您甚至不需要二元运算符=~[[ $line = *abd* ]]就足够了。请注意,使用bash的速度明显慢于awksed解决方案。