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

时间:2014-03-19 22:07:40

标签: 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

有谁知道我该怎么做?

3 个答案:

答案 0 :(得分:0)

如果每一行都以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

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

答案 1 :(得分:0)

如果您可以使用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

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

$ 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
a b c patch/sample/upgrade.sql patch/sample
a b c demo/sample/script.sh /demo/sample

答案 2 :(得分:0)

从@ fredtantini的答案中获取灵感,在终端中尝试以下内容

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

如果要将其输出到文件,

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