字符串和文件之间的差异

Mos*_*she 3 diff here-document here-string

基本上我想检查前后相同文件的差异 sed

试图运行:

diff /opt/postTrades.sh <<< $(sed 's/1\ MIN/10\ MIN/g' /opt/postTrades.sh)
Run Code Online (Sandbox Code Playgroud)

diff <<< $(sed 's/1\ MIN/10\ MIN/g' /opt/postTrades.sh) < /opt/postTrades.sh 
Run Code Online (Sandbox Code Playgroud)

diff <<< (sed 's/1\ MIN/10\ MIN/g' /opt/postTrades.sh) < /opt/postTrades.sh
Run Code Online (Sandbox Code Playgroud)

总是得到:

diff: missing operand after '/opt/postTrades.sh'
diff: Try 'diff --help' for more information.
Run Code Online (Sandbox Code Playgroud)

正确的做法是什么?谢谢。

Kus*_*nda 7

diff需要两个文件操作数。使用此处字符串,您可以将输入传递给diff其标准输入。

要从diff标准输入读取,请-用作文件名:

$ diff file - <<<"$( sed 'expression' file )"
Run Code Online (Sandbox Code Playgroud)

或者,更便携的是,

$ sed 'expression' file | diff file -
Run Code Online (Sandbox Code Playgroud)

如果您使用的 shell 支持进程替换<(...),例如bashksh93,这可能是另一种解决方案:

$ diff file <( sed 'expression' file )
Run Code Online (Sandbox Code Playgroud)

进程替换将显示为一个文件,diff并且实际上“与”相同:

$ sed 'expression' file >tempfile
$ diff file tempfile
$ rm tempfile
Run Code Online (Sandbox Code Playgroud)