首页 > 解决方案 > 命令行比较(例如 diff)忽略每行的非空白第一个字符,同时保持在输出中显示它

问题描述

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

在输出中我想保持领先+or -,例如

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

最简单的方法是什么?

标签: bashcommand-linediffpandoc

解决方案


我自己的尝试如下

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


推荐阅读