сравнение командной строки (например, diff) игнорирует первый символ каждой строки, не являющийся пробелом, при этом отображая его в выходных данных - PullRequest
1 голос
/ 23 января 2020

pando c печатает доступные расширения для каждого формата с начальным значением + или - (в зависимости от того, включено расширение или отключено). Так, например,

$ 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                                          <

Какой самый простой способ сделать это?

Ответы [ 2 ]

1 голос
/ 24 января 2020

Моя собственная попытка заключается в следующем

#!/bin/bash

format1="$1"
format2="$2"

leftExtPattern=$(sed -E 's/^(\+|-)/\1\^/g' <(pandoc --list-extensions=$1 | tr -d '\r') )
rightExtPattern=$(sed -E 's/$/\$/g' <(pandoc --list-extensions=$2 | tr -d '\r') )

diffExtensions=$(diff -y -t --strip-trailing-cr \
  <(echo "$leftExtPattern" | tr -d '^+-') \
  <(echo "$rightExtPattern" | tr -d '$+-'))

while read -r pattern; do
  diffExtensions=$(echo "$diffExtensions" | sed -E "s/\b(${pattern:1})\b/${pattern:0:1}\1/g")
done <<<"$leftExtPattern"$'\n'"$rightExtPattern"
echo "$diffExtensions"

Я считаю, что есть гораздо более элегантный и компактный способ сделать это, возможно, с помощью xargs ...

1 голос
/ 24 января 2020

Не очень хорошее решение, но у вас пока нет ответа, и это было лучшее, что я мог придумать, чтобы сохранить результат таким же, как вы предполагали

#!/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
...
...