Linux 如何将字符串复制并附加到行尾

Linux 如何将字符串复制并附加到行尾,linux,Linux,我有一个包含以下行的文件: a b c patch/sample/upgrade.sql a b c demo/sample/script.sh 我希望能够复制从“c”之后的位置到最后一个“/”的所有内容,并将其附加到文件中每行的末尾。例如: a b c patch/sample/upgrade.sql patch/sample a b c demo/sample/script.sh demo/sample 有人知道我怎么做吗?如果每一行都以a b c开头,那应该可以: $> sed

我有一个包含以下行的文件:

a b c patch/sample/upgrade.sql
a b c demo/sample/script.sh
我希望能够复制从“c”之后的位置到最后一个“/”的所有内容,并将其附加到文件中每行的末尾。例如:

a b c patch/sample/upgrade.sql patch/sample
a b c demo/sample/script.sh demo/sample

有人知道我怎么做吗?

如果每一行都以a b c开头,那应该可以:

$> sed 's@a b c \(.*\)/[^/]*@& \1@g' foo.txt 
a b c patch/sample/upgrade.sql patch/sample
a b c demo/sample/script.sh demo/sample

否则,只需调整第一部分。

如果可以使用
awk
,则可以尝试:

awk '
{
    last=x
    n=split($4,tmp,/[/]/)
    for(i=1;i<n;i++) {
        last=last sep tmp[i]; 
        sep="/"
    }
    $0=$0 FS last
}1' file
$awk'
{
last=x
n=拆分($4,tmp,/[/]/)

对于(i=1;i从@fredtantini的答案中获得灵感,请在终端中尝试以下内容

sed -r 's|(\w+ \w+ \w+ /((.*)?/)*(.*))|\1 \3|' foo.txt
如果要将其输出到文件

sed -r 's|(\w+ \w+ \w+ /((.*)?/)*(.*))|\1 \3|' foo.txt > newFoo.txt
sed -r 's|(\w+ \w+ \w+ /((.*)?/)*(.*))|\1 \3|' foo.txt
sed -r 's|(\w+ \w+ \w+ /((.*)?/)*(.*))|\1 \3|' foo.txt > newFoo.txt