1

我有一个files.txt包含以下条目的文本文件

"/home/dilawar/a.txt","/home/dilawar/b.txt"
"/home/dilawar/aa.txt","/home/dilawar/bb.txt"

现在我希望看到第diff1 行的文件。我尝试了以下

head -n 1 files.txt | cut -d, -f 2,3 | sed "s/,/\t/g" | xargs -I files vimdiff files 

它不工作。我用 diff 替换了 vimdiff,它也不起作用。然而这有效

head -n 1 files.txt | cut -d, -f 1 | xargs -I file vim file

如何file作为参数传递给 diff 作为两个单独的文件路径而不是单个字符串?

PS:更糟糕的是,我在一些文件路径中有空间。

4

3 回答 3

1

首先取第一行,然后用空格替换符号,并vimdiff通过子外壳将其输入。

 vimdiff $(head -1 files.txt | tr '",' ' ')

上述优雅的方法不适用于带有空格的名称。下面肮脏的会。

awk -F, 'NR==1{print "vimdiff",$1,$2}' files.txt | bash
于 2013-03-29T14:32:54.270 回答
0

我还转义了文件路径中的空格(第一个 sed 命令)

 head -n 1 files.txt | sed "s/ /\\\\ /g" | sed "s/[\",]/ /g" |xargs vimdiff
于 2013-03-29T15:00:37.280 回答
0

试试这个,看看有没有帮助

sed '1{s/,/ /; s/^/diff /;q}' files.txt|sh
于 2013-03-29T14:27:29.773 回答