我有一个包含如下行的文件:
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
有谁知道我该怎么做?
答案 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