1

files.txt次のエントリを含むテキストファイルがあります

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

今、1行目のファイルを見たいと思っていdiffます。私は次のことを試しました

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

機能していません。vimdiff を diff に置き換えましたが、どちらも機能しませんでした。ただし、これは機能します

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

file単一の文字列ではなく、2 つの個別のファイル パスとして 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 '1{s/,/ /; s/^/diff /;q}' files.txt|sh
于 2013-03-29T14:27:29.773 に答える
0

ファイルパスの空白もエスケープしました(最初のsedコマンド)

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