命令行比较(例如diff),忽略每行的非空白首字符,同时在输出中继续显示它

问题描述 投票:0回答:1

pandoc以开头的+-打印每种格式的可用扩展名(取决于扩展名是启用还是禁用)。因此,例如

$ pandoc --list-extensions=markdown
-abbreviations
+all_symbols_escapable
-angle_brackets_escapable
+auto_identifiers
-autolink_bare_uris
+backtick_code_blocks
...

为了区分两种格式的可用扩展名,我只是做(bash)

$ diff -y <(pandoc --list-extensions=markdown | tr -d '+-') <(pandoc --list-extensions=commonmark | tr -d '+-')
abbreviations                                                 <
all_symbols_escapable                                           all_symbols_escapable
angle_brackets_escapable                                      | ascii_identifiers
auto_identifiers                                                auto_identifiers
autolink_bare_uris                                              autolink_bare_uris
backtick_code_blocks                                            backtick_code_blocks
blank_before_blockquote                                       <
blank_before_header                                           <

在输出中,我想保留前导+-,例如

+abbreviations                                                 <
+all_symbols_escapable                                           -all_symbols_escapable
-angle_brackets_escapable                                      | -ascii_identifiers
+auto_identifiers                                                -auto_identifiers
-autolink_bare_uris                                              -autolink_bare_uris
+backtick_code_blocks                                            -backtick_code_blocks
+blank_before_blockquote                                       <
+blank_before_header                                           <

请注意,这与跑步不同

$ diff -y <(pandoc --list-extensions=markdown) <(pandoc --list-extensions=commonmark)
-abbreviations                                                | -all_symbols_escapable
+all_symbols_escapable                                        | -ascii_identifiers
-angle_brackets_escapable                                     | -auto_identifiers
+auto_identifiers                                             <
-autolink_bare_uris                                             -autolink_bare_uris
+backtick_code_blocks                                         | -backtick_code_blocks
+blank_before_blockquote                                      <
+blank_before_header                                          <

最简单的方法是什么?

bash command-line diff pandoc
1个回答
0
投票

不是一个很好的解决方案,但是您还没有答案,这是我能想到的最好的方法,可以将输出保持与预期的相同

#!/bin/bash
mapfile -t markdown < <(pandoc --list-extensions=markdown)
commonmark="$(pandoc --list-extensions=commonmark)"
out=(); i=0
while read -r line; do
    change="$(echo "${line}" | grep -Eo '<|\|')" || change=' ' && line="$(echo "${line}" | awk '{print $NF}')"
    com="$(echo "${commonmark}" | grep "${line}")"
    out+=("${markdown[i]},${change} ${com}"); ((i++))
done < <(diff -y <(printf '%s\n' "${markdown[@]}" | tr -d '+-') <(echo "${commonmark}" | tr -d '+-'))
printf '%s\n' "${out[@]}" | column -t -s ','

输出

-abbreviations                      < 
+all_symbols_escapable                -all_symbols_escapable
-angle_brackets_escapable           | -ascii_identifiers
+auto_identifiers                     -auto_identifiers
-gfm_auto_identifiers               
-autolink_bare_uris                   -autolink_bare_uris
+backtick_code_blocks                 -backtick_code_blocks
+blank_before_blockquote            < 
+blank_before_header                < 
+bracketed_spans                    < 
+citations                          < 
-compact_definition_lists           < 
+definition_lists                   < 
-east_asian_line_breaks               -east_asian_line_breaks
-emoji                                -emoji
...
© www.soinside.com 2019 - 2024. All rights reserved.