~によるとhttps://www.computerhope.com/unix/udiff.htm
この
diff
コマンドは両方のファイルを分析し、異なる行を印刷します。
同じdiff
コマンドを使用して2つの文字列を比較できますか?
$ more file*
::::::::::::::
file1.txt
::::::::::::::
hey
::::::::::::::
file2.txt
::::::::::::::
hi
$ diff file1.txt file2.txt
1c1
< hey
---
> hi
hey
hi
との内容を2つの異なるファイルに保存せずに直接読み取ることはできますか?
ただし、次の例にはhey
orというファイルがないため、エラーメッセージが表示されます。hi
No such file or directory
$ diff hey hi
diff: hey: No such file or directory
diff: hi: No such file or directory
答え1
diff
diff
はい、ファイルのみが比較されるため、2つの文字列でファイルを作成する場合はそれを使用できます。
これを行う簡単な方法は、以下をサポートするシェルでプロセス置換を使用することです。
diff <( printf '%s\n' "$string1" ) <( printf '%s\n' "$string2" )
例:
$ diff <( printf '%s\n' "hey" ) <( printf '%s\n' "hi" )
1c1
< hey
---
> hi
他の殻では
printf '%s\n' "$string1" >tmpfile
printf '%s\n' "$string2" | diff tmpfile -
rm -f tmpfile
diff
2 番目の例では、ファイルに最初の文字列が含まれ、2 番目の文字列が標準入力として提供されます。diff
最初の文字列を最初の引数として含むファイルを使用して呼び出されます。 2番目の引数は、-
標準入力を読み取る必要があることを示します(2番目の文字列はを介して到達しますprintf
)。
答え2
スクリプトエディタ(AppleScript)では、「diff」コマンドでファイル入力の代わりに文字列を使用したい人のために、少しの努力の後に次のことが機能することがわかりました。
do shell script "bash -c 'diff -y <(echo '\\''" & string1 & "'\\'') <(echo '\\''" & string2 & "'\\'')'
bashシェルと邪悪なエスケープマーカーで実行するには、コードを文字列としてレンダリングする必要があります。