diff出力から追加文字を削除する

diff出力から追加文字を削除する

Unixでは、次の出力があります。

$ diff -y --suppress-common-lines backup.txt newfile.txt
                                                              > `jjj' int,

ただjjj : int出力として必要です。次のことを試しても期待どおりに機能しませんでした。

$ diff -y --suppress-common-lines backup.txt newfile.txt | grep -i '>' |tr -d '[>]'  |sed 's/,//g'

ここに画像の説明を入力してください。

答え1

次の操作がawk実行されます。

diff -y --suppress-common-lines backup.txt newfile.txt|awk -F'[>,]' '{gsub(/ /,"")} {print $2} '

答え2

次のことがわかりますdiff

diff --old-line-format= \
     --unchanged-line-format= \
     --new-line-format=%L backup.txt newfile.txt

出力を後処理するには、diff -y次のようにします。

diff  -y --suppress-common-lines backup.txt newfile.txt |
  LC_ALL=C sed -n $'s/^[[:blank:]]*>\t//p'

backup.txtしかし、このような行を含めることが可能であれば完璧ではありません[blanks]>[TAB][anything]

$'...'\tTAB文字で拡張されたksh93(現在の他のシェルでもサポートされています)の特殊なタイプの引用符。 GNU実装にはTAB(大括弧式ではありません)と既に一致するsed必要はありません。\t

Cロケールは[[:blank:]]スペースまたはタブに一致します。

パイプで接続

tr -d \`\',

出力から`文字を削除します',

そして:

sed 's/[[:space:]]\{1,\}/ : /g'

各行に1つ以上の空白文字シーケンスを" : "

または、2つのコマンドを1つのsedコマンドに結合します。

sed 's/[`,'\'']//g; s/[[:space:]]\{1,\}/ : /g'

sedあるいは、並列出力を後処理するコマンドと組み合わせる。

sed $'s/^[ \t]*>\t/!d
      s///p
      s/[`,'\'']//g
      s/[[:space:]]\{1,\}/ : /g'

関連情報