Provided by: hledger_1.19.1-1_amd64 bug

NAME

       hledger - a command-line accounting tool

SYNOPSIS

       hledger [-f FILE] COMMAND [OPTIONS] [ARGS]
       hledger [-f FILE] ADDONCMD -- [OPTIONS] [ARGS]
       hledger

DESCRIPTION

       hledger  is  a reliable, cross-platform set of programs for tracking money, time, or any other commodity,
       using double-entry accounting and a simple, editable file format.  hledger is  inspired  by  and  largely
       compatible with ledger(1).

       This  is  hledger’s  command-line  interface  (there  are  also  terminal and web interfaces).  Its basic
       function is to read a plain text file describing financial transactions (in accounting terms,  a  general
       journal)  and print useful reports on standard output, or export them as CSV.  hledger can also read some
       other file formats such as CSV files, translating them to journal format.   Additionally,  hledger  lists
       other hledger-* executables found in the user’s $PATH and can invoke them as subcommands.

       hledger reads data from one or more files in hledger journal, timeclock, timedot, or CSV format specified
       with -f, or $LEDGER_FILE, or $HOME/.hledger.journal (on windows, perhaps C:/Users/USER/.hledger.journal).
       If  using  $LEDGER_FILE,  note  this  must be a real environment variable, not a shell variable.  You can
       specify standard input with -f-.

       Transactions are dated movements of money between two (or more) named accounts,  and  are  recorded  with
       journal entries like this:

              2015/10/16 bought food
               expenses:food          $10
               assets:cash

       For more about this format, see hledger_journal(5).

       Most  users  use  a  text editor to edit the journal, usually with an editor mode such as ledger-mode for
       added convenience.  hledger’s interactive add command is another way to record new transactions.  hledger
       never changes existing transactions.

       To get started, you can either save some entries like the above in ~/.hledger.journal, or run hledger add
       and follow the prompts.  Then try some commands like hledger print or hledger balance.  Run hledger  with
       no arguments for a list of commands.

COMMON TASKS

       Here  are  some  quick  examples  of  how to do some basic tasks with hledger.  For more details, see the
       reference  section  below,   the   hledger_journal(5)   manual,   or   the   more   extensive   docs   at
       https://hledger.org.

   Getting help
              $ hledger                 # show available commands
              $ hledger --help          # show common options
              $ hledger CMD --help      # show common and command options, and command help
              $ hledger help            # show available manuals/topics
              $ hledger help hledger    # show hledger manual as info/man/text (auto-chosen)
              $ hledger help journal --man  # show the journal manual as a man page
              $ hledger help --help     # show more detailed help for the help command

       Find more docs, chat, mail list, reddit, issue tracker: https://hledger.org#help-feedback

   Constructing command lines
       hledger has an extensive and powerful command line interface.  We strive to keep it simple and ergonomic,
       but  you  may  run  into  one  of  the confusing real world details described in OPTIONS, below.  If that
       happens, here are some tips that may help:

       • command-specific options must go after the command (it's fine to put all options  there)  (hledger  CMD
         OPTS ARGS)

       • running add-on executables directly simplifies command line parsing (hledger-ui OPTS ARGS)

       • enclose "problematic" args in single quotes

       • if needed, also add a backslash to hide regular expression metacharacters from the shell

       • to see how a misbehaving command is being parsed, add --debug=2.

   Starting a journal file
       hledger looks for your accounting data in a journal file, $HOME/.hledger.journal by default:

              $ hledger stats
              The hledger journal file "/Users/simon/.hledger.journal" was not found.
              Please create it first, eg with "hledger add" or a text editor.
              Or, specify an existing journal file with -f or LEDGER_FILE.

       You can override this by setting the LEDGER_FILE environment variable.  It's a good practice to keep this
       important  file under version control, and to start a new file each year.  So you could do something like
       this:

              $ mkdir ~/finance
              $ cd ~/finance
              $ git init
              Initialized empty Git repository in /Users/simon/finance/.git/
              $ touch 2020.journal
              $ echo "export LEDGER_FILE=$HOME/finance/2020.journal" >> ~/.bashrc
              $ source ~/.bashrc
              $ hledger stats
              Main file                : /Users/simon/finance/2020.journal
              Included files           :
              Transactions span        :  to  (0 days)
              Last transaction         : none
              Transactions             : 0 (0.0 per day)
              Transactions last 30 days: 0 (0.0 per day)
              Transactions last 7 days : 0 (0.0 per day)
              Payees/descriptions      : 0
              Accounts                 : 0 (depth 0)
              Commodities              : 0 ()
              Market prices            : 0 ()

   Setting opening balances
       Pick a starting date for which you can look up the balances of some  real-world  assets  (bank  accounts,
       wallet..) and liabilities (credit cards..).

       To  avoid  a  lot  of data entry, you may want to start with just one or two accounts, like your checking
       account or cash wallet; and pick a recent starting date, like today or the start of the  week.   You  can
       always come back later and add more accounts and older transactions, eg going back to january 1st.

       Add  an  opening  balances transaction to the journal, declaring the balances on this date.  Here are two
       ways to do it:

       • The first way: open the journal in any text editor and save an entry like this:

                2020-01-01 * opening balances
                    assets:bank:checking                $1000   = $1000
                    assets:bank:savings                 $2000   = $2000
                    assets:cash                          $100   = $100
                    liabilities:creditcard               $-50   = $-50
                    equity:opening/closing balances

         These are start-of-day balances, ie whatever was in the account at the end of the previous day.

         The * after the date is an optional status flag.  Here it means "cleared & confirmed".

         The currency symbols are optional, but  usually  a  good  idea  as  you'll  be  dealing  with  multiple
         currencies sooner or later.

         The = amounts are optional balance assertions, providing extra error checking.

       • The second way: run hledger add and follow the prompts to record a similar transaction:

                $ hledger add
                Adding transactions to journal file /Users/simon/finance/2020.journal
                Any command line arguments will be used as defaults.
                Use tab key to complete, readline keys to edit, enter to accept defaults.
                An optional (CODE) may follow transaction dates.
                An optional ; COMMENT may follow descriptions or amounts.
                If you make a mistake, enter < at any prompt to go one step backward.
                To end a transaction, enter . when prompted.
                To quit, enter . at a date prompt or press control-d or control-c.
                Date [2020-02-07]: 2020-01-01
                Description: * opening balances
                Account 1: assets:bank:checking
                Amount  1: $1000
                Account 2: assets:bank:savings
                Amount  2 [$-1000]: $2000
                Account 3: assets:cash
                Amount  3 [$-3000]: $100
                Account 4: liabilities:creditcard
                Amount  4 [$-3100]: $-50
                Account 5: equity:opening/closing balances
                Amount  5 [$-3050]:
                Account 6 (or . or enter to finish this transaction): .
                2020-01-01 * opening balances
                    assets:bank:checking                      $1000
                    assets:bank:savings                       $2000
                    assets:cash                                $100
                    liabilities:creditcard                     $-50
                    equity:opening/closing balances          $-3050

                Save this transaction to the journal ? [y]:
                Saved.
                Starting the next transaction (. or ctrl-D/ctrl-C to quit)
                Date [2020-01-01]: .

       If you're using version control, this could be a good time to commit the journal.  Eg:

              $ git commit -m 'initial balances' 2020.journal

   Recording transactions
       As  you  spend  or  receive money, you can record these transactions using one of the methods above (text
       editor, hledger add) or by using the hledger-iadd or hledger-web add-ons, or by using the import  command
       to convert CSV data downloaded from your bank.

       Here are some simple transactions, see the hledger_journal(5) manual and hledger.org for more ideas:

              2020/1/10 * gift received
                assets:cash   $20
                income:gifts

              2020.1.12 * farmers market
                expenses:food    $13
                assets:cash

              2020-01-15 paycheck
                income:salary
                assets:bank:checking    $1000

   Reconciling
       Periodically  you  should  reconcile - compare your hledger-reported balances against external sources of
       truth, like bank statements or your bank's website - to be sure that your  ledger  accurately  represents
       the real-world balances (and, that the real-world institutions have not made a mistake!).  This gets easy
       and  fast with (1) practice and (2) frequency.  If you do it daily, it can take 2-10 minutes.  If you let
       it pile up, expect it to take longer as you hunt down errors and discrepancies.

       A typical workflow:

       1. Reconcile cash.  Count what's in your wallet.  Compare with what hledger reports (hledger  bal  cash).
          If  they are different, try to remember the missing transaction, or look for the error in the already-
          recorded transactions.  A register report can be helpful (hledger reg cash).  If you  can't  find  the
          error,  add  an  adjustment  transaction.   Eg if you have $105 after the above, and can't explain the
          missing $2, it could be:

                  2020-01-16 * adjust cash
                      assets:cash    $-2 = $105
                      expenses:misc

       2. Reconcile checking.  Log in to your bank's website.  Compare today's (cleared) balance with  hledger's
          cleared  balance (hledger bal checking -C).  If they are different, track down the error or record the
          missing transaction(s) or add an adjustment transaction, similar to the above.  Unlike the cash  case,
          you  can  usually  compare  the  transaction  history  and running balance from your bank with the one
          reported by hledger reg checking -C.  This will be easier if you generally  record  transaction  dates
          quite similar to your bank's clearing dates.

       3. Repeat for other asset/liability accounts.

       Tip:  instead  of the register command, use hledger-ui to see a live-updating register while you edit the
       journal: hledger-ui --watch --register checking -C

       After reconciling, it could be a good time to mark the reconciled transactions' status  as  "cleared  and
       confirmed",  if  you  want  to track that, by adding the * marker.  Eg in the paycheck transaction above,
       insert * between 2020-01-15 and paycheck

       If you're using version control, this can be another good time to commit:

              $ git commit -m 'txns' 2020.journal

   Reporting
       Here are some basic reports.

       Show all transactions:

              $ hledger print
              2020-01-01 * opening balances
                  assets:bank:checking                      $1000
                  assets:bank:savings                       $2000
                  assets:cash                                $100
                  liabilities:creditcard                     $-50
                  equity:opening/closing balances          $-3050

              2020-01-10 * gift received
                  assets:cash              $20
                  income:gifts

              2020-01-12 * farmers market
                  expenses:food             $13
                  assets:cash

              2020-01-15 * paycheck
                  income:salary
                  assets:bank:checking           $1000

              2020-01-16 * adjust cash
                  assets:cash               $-2 = $105
                  expenses:misc

       Show account names, and their hierarchy:

              $ hledger accounts --tree
              assets
                bank
                  checking
                  savings
                cash
              equity
                opening/closing balances
              expenses
                food
                misc
              income
                gifts
                salary
              liabilities
                creditcard

       Show all account totals:

              $ hledger balance
                             $4105  assets
                             $4000    bank
                             $2000      checking
                             $2000      savings
                              $105    cash
                            $-3050  equity:opening/closing balances
                               $15  expenses
                               $13    food
                                $2    misc
                            $-1020  income
                              $-20    gifts
                            $-1000    salary
                              $-50  liabilities:creditcard
              --------------------
                                 0

       Show only asset and liability balances, as a flat list, limited to depth 2:

              $ hledger bal assets liabilities --flat -2
                             $4000  assets:bank
                              $105  assets:cash
                              $-50  liabilities:creditcard
              --------------------
                             $4055

       Show the same thing without negative numbers, formatted as a simple balance sheet:

              $ hledger bs --flat -2
              Balance Sheet 2020-01-16

                                      || 2020-01-16
              ========================++============
               Assets                 ||
              ------------------------++------------
               assets:bank            ||      $4000
               assets:cash            ||       $105
              ------------------------++------------
                                      ||      $4105
              ========================++============
               Liabilities            ||
              ------------------------++------------
               liabilities:creditcard ||        $50
              ------------------------++------------
                                      ||        $50
              ========================++============
               Net:                   ||      $4055

       The final total is your "net worth" on the end date.  (Or use bse for a full balance sheet with equity.)

       Show income and expense totals, formatted as an income statement:

              hledger is
              Income Statement 2020-01-01-2020-01-16

                             || 2020-01-01-2020-01-16
              ===============++=======================
               Revenues      ||
              ---------------++-----------------------
               income:gifts  ||                   $20
               income:salary ||                 $1000
              ---------------++-----------------------
                             ||                 $1020
              ===============++=======================
               Expenses      ||
              ---------------++-----------------------
               expenses:food ||                   $13
               expenses:misc ||                    $2
              ---------------++-----------------------
                             ||                   $15
              ===============++=======================
               Net:          ||                 $1005

       The final total is your net income during this period.

       Show transactions affecting your wallet, with running total:

              $ hledger register cash
              2020-01-01 opening balances     assets:cash                   $100          $100
              2020-01-10 gift received        assets:cash                    $20          $120
              2020-01-12 farmers market       assets:cash                   $-13          $107
              2020-01-16 adjust cash          assets:cash                    $-2          $105

       Show weekly posting counts as a bar chart:

              $ hledger activity -W
              2019-12-30 *****
              2020-01-06 ****
              2020-01-13 ****

   Migrating to a new file
       At the end of the year, you may want to continue your journal in a new file,  so  that  old  transactions
       don't  slow  down  or  clutter your reports, and to help ensure the integrity of your accounting history.
       See the close command.

       If using version control, don't forget to git add the new file.

OPTIONS

   General options
       To see general usage help, including general options which are supported by most  hledger  commands,  run
       hledger -h.

       General help options:

       -h --help
              show general usage (or after COMMAND, command usage)

       --version
              show version

       --debug[=N]
              show debug output (levels 1-9, default: 1)

       General input options:

       -f FILE --file=FILE
              use a different input file.  For stdin, use - (default: $LEDGER_FILE or $HOME/.hledger.journal)

       --rules-file=RULESFILE
              Conversion rules file to use when reading CSV (default: FILE.rules)

       --separator=CHAR
              Field separator to expect when reading CSV (default: ',')

       --alias=OLD=NEW
              rename accounts named OLD to NEW

       --anon anonymize accounts and payees

       --pivot FIELDNAME
              use some other field or tag for the account name

       -I --ignore-assertions
              disable balance assertion checks (note: does not disable balance assignments)

       General reporting options:

       -b --begin=DATE
              include postings/txns on or after this date

       -e --end=DATE
              include postings/txns before this date

       -D --daily
              multiperiod/multicolumn report by day

       -W --weekly
              multiperiod/multicolumn report by week

       -M --monthly
              multiperiod/multicolumn report by month

       -Q --quarterly
              multiperiod/multicolumn report by quarter

       -Y --yearly
              multiperiod/multicolumn report by year

       -p --period=PERIODEXP
              set start date, end date, and/or reporting interval all at once using period expressions syntax

       --date2
              match the secondary date instead (see command help for other effects)

       -U --unmarked
              include only unmarked postings/txns (can combine with -P or -C)

       -P --pending
              include only pending postings/txns

       -C --cleared
              include only cleared postings/txns

       -R --real
              include only non-virtual postings

       -NUM --depth=NUM
              hide/aggregate accounts or postings more than NUM levels deep

       -E --empty
              show items with zero amount, normally hidden (and vice-versa in hledger-ui/hledger-web)

       -B --cost
              convert amounts to their cost/selling amount at transaction time

       -V --market
              convert amounts to their market value in default valuation commodities

       -X --exchange=COMM
              convert amounts to their market value in commodity COMM

       --value
              convert amounts to cost or market value, more flexibly than -B/-V/-X

       --infer-value
              with -V/-X/--value, also infer market prices from transactions

       --auto apply automated posting rules to modify transactions.

       --forecast
              generate future transactions from periodic transaction rules, for the next 6 months or till report
              end date.  In hledger-ui, also make ordinary future transactions visible.

       --color=WHEN (or --colour=WHEN)
              Should  color-supporting commands use ANSI color codes in text output.  'auto' (default): whenever
              stdout seems to be a color-supporting terminal.  'always' or 'yes': always, useful eg when  piping
              output into 'less -R'.  'never' or 'no': never.  A NO_COLOR environment variable overrides this.

       When a reporting option appears more than once in the command line, the last one takes precedence.

       Some reporting options can also be written as query arguments.

   Command options
       To see options for a particular command, including command-specific options, run: hledger COMMAND -h.

       Command-specific options must be written after the command name, eg: hledger print -x.

       Additionally,  if  the  command  is  an addon, you may need to put its options after a double-hyphen, eg:
       hledger ui -- --watch.  Or, you can run the addon executable directly: hledger-ui --watch.

   Command arguments
       Most hledger commands accept arguments after the command name, which are often  a  query,  filtering  the
       data in some way.

       You  can save a set of command line options/arguments in a file, and then reuse them by writing @FILENAME
       as a command line argument.  Eg: hledger bal @foo.args.  (To prevent this, eg if  you  have  an  argument
       that begins with a literal @, precede it with --, eg: hledger bal -- @ARG).

       Inside the argument file, each line should contain just one option or argument.  Avoid the use of spaces,
       except  inside  quotes  (or  you'll  see  a confusing error).  Between a flag and its argument, use = (or
       nothing).  Bad:

              assets depth:2
              -X USD

       Good:

              assets
              depth:2
              -X=USD

       For special characters (see below), use one less level of quoting than you would at the  command  prompt.
       Bad:

              -X"$"

       Good:

              -X$

       See also: Save frequently used options.

   Queries
       One  of  hledger's  strengths  is  being  able  to  quickly report on precise subsets of your data.  Most
       commands accept an optional query expression, written as arguments after the command name, to filter  the
       data  by date, account name or other criteria.  The syntax is similar to a web search: one or more space-
       separated search terms, quotes to enclose whitespace, prefixes to match specific fields, a not: prefix to
       negate the match.

       We do not yet support arbitrary  boolean  combinations  of  search  terms;  instead  most  commands  show
       transactions/postings/accounts which match (or negatively match):

       • any of the description terms AND

       • any of the account terms AND

       • any of the status terms AND

       • all the other terms.

       The print command instead shows transactions which:

       • match any of the description terms AND

       • have any postings matching any of the positive account terms AND

       • have no postings matching any of the negative account terms AND

       • match all the other terms.

       The  following  kinds  of search terms can be used.  Remember these can also be prefixed with not:, eg to
       exclude a particular subaccount.

       REGEX, acct:REGEX
              match account names by this regular expression.  (With no prefix,  acct:  is  assumed.)   same  as
              above

       amt:N, amt:<N, amt:<=N, amt:>N, amt:>=N
              match  postings  with  a  single-commodity  amount that is equal to, less than, or greater than N.
              (Multi-commodity amounts are not tested, and will always match.) The comparison has two modes:  if
              N  is  preceded  by  a + or - sign (or is 0), the two signed numbers are compared.  Otherwise, the
              absolute magnitudes are compared, ignoring sign.

       code:REGEX
              match by transaction code (eg check number)

       cur:REGEX
              match postings or transactions including any amounts  whose  currency/commodity  symbol  is  fully
              matched  by  REGEX.   (For  a  partial match, use .*REGEX.*).  Note, to match characters which are
              regex-significant, like the dollar sign ($), you need to prepend \.  And when  using  the  command
              line  you need to add one more level of quoting to hide it from the shell, so eg do: hledger print
              cur:'\$' or hledger print cur:\\$.

       desc:REGEX
              match transaction descriptions.

       date:PERIODEXPR
              match dates within the specified period.  PERIODEXPR  is  a  period  expression  (with  no  report
              interval).   Examples:  date:2016,  date:thismonth,  date:2000/2/1-2/15,  date:lastweek-.   If the
              --date2 command line flag is present, this matches secondary dates instead.

       date2:PERIODEXPR
              match secondary dates within the specified period.

       depth:N
              match (or display, depending on command) accounts at or above this depth

       note:REGEX
              match transaction notes (part of description right of |, or whole description when there's no |)

       payee:REGEX
              match transaction payee/payer names (part of description left of  |,  or  whole  description  when
              there's no |)

       real:, real:0
              match real or virtual postings respectively

       status:, status:!, status:*
              match unmarked, pending, or cleared transactions respectively

       tag:REGEX[=REGEX]
              match  by  tag name, and optionally also by tag value.  Note a tag: query is considered to match a
              transaction if it matches any of the postings.  Also remember that postings inherit  the  tags  of
              their parent transaction.

       The following special search term is used automatically in hledger-web, only:

       inacct:ACCTNAME
              tells hledger-web to show the transaction register for this account.  Can be filtered further with
              acct etc.

       Some  of  these  can  also  be expressed as command-line options (eg depth:2 is equivalent to --depth 2).
       Generally you can mix options and query arguments, and the resulting query  will  be  their  intersection
       (perhaps excluding the -p/--period option).

   Special characters in arguments and queries
       In shell command lines, option and argument values which contain "problematic" characters, ie spaces, and
       also  characters  significant  to  your shell such as <, >, (, ), | and $, should be escaped by enclosing
       them in quotes or by writing backslashes before the characters.  Eg:

       hledger register -p 'last year' "accounts receivable (receivable|payable)" amt:\>100.

   More escaping
       Characters significant both to the shell and in regular expressions may need one extra level of escaping.
       These include parentheses, the pipe symbol and the dollar sign.  Eg, to match  the  dollar  symbol,  bash
       users should do:

       hledger balance cur:'\$'

       or:

       hledger balance cur:\\$

   Even more escaping
       When  hledger  runs  an addon executable (eg you type hledger ui, hledger runs hledger-ui), it de-escapes
       command-line options and arguments once, so you might need to triple-escape.  Eg in bash, running the  ui
       command and matching the dollar sign, it's:

       hledger ui cur:'\\$'

       or:

       hledger ui cur:\\\\$

       If you asked why four slashes above, this may help:

       unescaped:        $
       escaped:          \$
       double-escaped:   \\$
       triple-escaped:   \\\\$

       (The number of backslashes in fish shell is left as an exercise for the reader.)

       You can always avoid the extra escaping for addons by running the addon directly:

       hledger-ui cur:\\$

   Less escaping
       Inside  an  argument  file, or in the search field of hledger-ui or hledger-web, or at a GHCI prompt, you
       need one less level of escaping than at the command line.  And backslashes may work better  than  quotes.
       Eg:

       ghci> :main balance cur:\$

   Unicode characters
       hledger is expected to handle non-ascii characters correctly:

       • they  should  be  parsed  correctly  in input files and on the command line, by all hledger tools (add,
         iadd, hledger-web's search/add/edit forms, etc.)

       • they should be displayed correctly by all hledger tools, and on-screen alignment should be preserved.

       This requires a well-configured environment.  Here are some tips:

       • A system locale must be configured, and it must be one that can decode the characters being  used.   In
         bash,  you  can  set  a  locale  like  this:  export  LANG=en_US.UTF-8.  There are some more details in
         Troubleshooting.  This step is essential - without it, hledger will quit on  encountering  a  non-ascii
         character (as with all GHC-compiled programs).

       • your terminal software (eg Terminal.app, iTerm, CMD.exe, xterm..) must support unicode

       • the terminal must be using a font which includes the required unicode glyphs

       • the terminal should be configured to display wide characters as double width (for report alignment)

       • on  Windows,  for  best  results you should run hledger in the same kind of environment in which it was
         built.  Eg hledger built in the standard CMD.EXE environment (like the binaries on our  download  page)
         might show display problems when run in a cygwin or msys terminal, and vice versa.  (See eg #961).

   Input files
       hledger  reads transactions from a data file (and the add command writes to it).  By default this file is
       $HOME/.hledger.journal (or on Windows, something like C:/Users/USER/.hledger.journal).  You can  override
       this with the $LEDGER_FILE environment variable:

              $ setenv LEDGER_FILE ~/finance/2016.journal
              $ hledger stats

       or with the -f/--file option:

              $ hledger -f /some/file stats

       The file name - (hyphen) means standard input:


              $ cat some.journal | hledger -f-
       Usually the data file is in hledger's journal format, but it can be in any of the supported file formats,
       which currently are:

       Reader:     Reads:                                    Used      for      file
                                                             extensions:
       ──────────────────────────────────────────────────────────────────────────────
       journal     hledger journal files and  some  Ledger   .journal   .j  .hledger
                   journals, for transactions                .ledger
       timeclock   timeclock  files,  for   precise   time   .timeclock
                   logging
       timedot     timedot  files,  for  approximate  time   .timedot
                   logging
       csv         comma/semicolon/tab/other-separated       .csv .ssv .tsv
                   values, for data import

       hledger detects the format automatically based on the file extensions shown above.  If it can't recognise
       the file extension, it assumes journal format.  So  for  non-journal  files,  it's  important  to  use  a
       recognised file extension, so as to either read successfully or to show relevant error messages.

       When  you  can't ensure the right file extension, not to worry: you can force a specific reader/format by
       prefixing the file path with the format and a colon.  Eg to read a .dat file as csv:

              $ hledger -f csv:/some/csv-file.dat stats
              $ echo 'i 2009/13/1 08:00:00' | hledger print -ftimeclock:-

       You can specify multiple -f options, to  read  multiple  files  as  one  big  journal.   There  are  some
       limitations with this:

       • directives in one file will not affect the other files

       • balance assertions will not see any account balances from previous files

       If you need either of those things, you can

       • use a single parent file which includes the others

       • or concatenate the files into one before reading, eg: cat a.journal b.journal | hledger -f- CMD.

   Output destination
       hledger  commands send their output to the terminal by default.  You can of course redirect this, eg into
       a file, using standard shell syntax:

              $ hledger print > foo.txt

       Some commands (print, register, stats, the balance commands) also provide  the  -o/--output-file  option,
       which does the same thing without needing the shell.  Eg:

              $ hledger print -o foo.txt
              $ hledger print -o -        # write to stdout (the default)

   Output format
       Some  commands  (print,  register, the balance commands) offer a choice of output format.  In addition to
       the usual plain text format (txt), there are CSV (csv), HTML (html), JSON (json) and SQL (sql).  This  is
       controlled by the -O/--output-format option:

              $ hledger print -O csv

       or, by a file extension specified with -o/--output-file:

              $ hledger balancesheet -o foo.html   # write HTML to foo.html

       The -O option can be used to override the file extension if needed:

              $ hledger balancesheet -o foo.txt -O html   # write HTML to foo.txt

       Some notes about JSON output:

       • This  feature  is  marked  experimental,  and  not yet much used; you should expect our JSON to evolve.
         Real-world feedback is welcome.

       • Our JSON is rather large and verbose, as it is quite a faithful representation  of  hledger's  internal
         data  types.   To  understand  the  JSON,  read  the  Haskell  type  definitions,  which  are mostly in
         https://github.com/simonmichael/hledger/blob/master/hledger-lib/Hledger/Data/Types.hs.

       • hledger represents quantities as Decimal values storing up to 255 significant digits, eg for  repeating
         decimals.   Such  numbers can arise in practice (from automatically-calculated transaction prices), and
         would break most JSON consumers.  So in JSON, we show quantities as simple  Numbers  with  at  most  10
         decimal  places.  We don't limit the number of integer digits, but that part is under your control.  We
         hope this approach will not cause problems in practice; if you find otherwise, please let us know.  (Cf
         #1195)

       Notes about SQL output:

       • SQL output is also marked experimental, and much like JSON could use real-world feedback.

       • SQL output is expected to work with sqlite, MySQL and PostgreSQL

       • SQL output is structured with the expectations that statements will be executed in the empty  database.
         If  you  already have tables created via SQL output of hledger, you would probably want to either clear
         tables of existing data (via delete or truncate SQL statements) or drop tables completely as  otherwise
         your postings will be duped.

   Regular expressions
       hledger uses regular expressions in a number of places:

       • query  terms,  on  the  command  line and in the hledger-web search form: REGEX, desc:REGEX, cur:REGEX,
         tag:...=REGEX

       • CSV rules conditional blocks: if REGEX ...

       • account alias directives and options: alias /REGEX/ = REPLACEMENT, --alias /REGEX/=REPLACEMENT

       hledger's regular expressions come from the regex-tdfa library.  If they're not doing  what  you  expect,
       it's important to know exactly what they support:

       1. they are case insensitive

       2. they are infix matching (they do not need to match the entire thing being matched)

       3. they are POSIX ERE (extended regular expressions)

       4. they also support GNU word boundaries (\b, \B, \<, \>)

       5. they  do  not  support  backreferences; if you write \1, it will match the digit 1.  Except when doing
          text replacement, eg in account aliases, where backreferences can be used in the replacement string to
          reference capturing groups in the search regexp.

       6. they do not support mode modifiers ((?s)), character classes (\w, \d), or anything else not  mentioned
          above.

       Some things to note:

       • In  the  alias  directive  and  --alias option, regular expressions must be enclosed in forward slashes
         (/REGEX/).  Elsewhere in hledger, these are not required.

       • In queries, to match a regular expression metacharacter like  $  as  a  literal  character,  prepend  a
         backslash.  Eg to search for amounts with the dollar sign in hledger-web, write cur:\$.

       • On  the  command  line,  some  metacharacters like $ have a special meaning to the shell and so must be
         escaped at least once more.  See Special characters.

   Smart dates
       hledger's user interfaces accept a flexible "smart date" syntax  (unlike  dates  in  the  journal  file).
       Smart dates allow some english words, can be relative to today's date, and can have less-significant date
       parts omitted (defaulting to 1).

       Examples:

       2004/10/1,   2004-01-01,      exact date, several separators allowed.   Year
       2004.9.1                      is 4+ digits, month is 1-12, day is 1-31
       2004                          start of year
       2004/10                       start of month
       10/1                          month and day in current year
       21                            day in current month
       october, oct                  start of month in current year
       yesterday,        today,      -1, 0, 1 days from today
       tomorrow
       last/this/next                -1, 0, 1 periods from the current period
       day/week/month/quarter/year
       20181201                      8 digit YYYYMMDD with valid year month and day
       201812                        6 digit YYYYMM with valid year and month

       Counterexamples - malformed digit sequences might give surprising results:

       201813        6 digits with an  invalid  month  is  parsed  as  start  of
                     6-digit year
       20181301      8  digits  with  an  invalid  month  is  parsed as start of
                     8-digit year
       20181232      8 digits with an invalid day gives an error
       201801012     9+ digits beginning with a valid YYYYMMDD gives an error

   Report start & end date
       Most hledger reports show the full span of time represented by the journal data,  by  default.   So,  the
       effective  report  start and end dates will be the earliest and latest transaction or posting dates found
       in the journal.

       Often you will want to see a shorter time span, such as the current  month.   You  can  specify  a  start
       and/or end date using -b/--begin, -e/--end, -p/--period or a date: query (described below).  All of these
       accept the smart date syntax.

       Some notes:

       • As  in  Ledger,  end  dates are exclusive, so you need to write the date after the last day you want to
         include.

       • As noted in reporting options: among start/end dates specified with options,  the  last  (i.e.   right-
         most) option takes precedence.

       • The  effective  report start and end dates are the intersection of the start/end dates from options and
         that from date: queries.  That is, date:2019-01 date:2019 -p'2000 to 2030'  yields  January  2019,  the
         smallest common time span.

       Examples:

       -b 2016/3/17       begin on St. Patrick’s day 2016
       -e 12/1            end  at  the  start  of  december  1st of the current year
                          (11/30 will be the last date included)
       -b thismonth       all transactions on or after the 1st of the current month
       -p thismonth       all transactions in the current month
       date:2016/3/17..   the above written as  queries  instead  (..  can  also  be
                          replaced with -)
       date:..12/1
       date:thismonth..
       date:thismonth

   Report intervals
       A report interval can be specified so that commands like register, balance and activity will divide their
       reports  into  multiple  subperiods.   The  basic  intervals  can  be  selected  with  one of -D/--daily,
       -W/--weekly, -M/--monthly, -Q/--quarterly, or -Y/--yearly.  More complex intervals may be specified  with
       a period expression.  Report intervals can not be specified with a query.

   Period expressions
       The  -p/--period option accepts period expressions, a shorthand way of expressing a start date, end date,
       and/or report interval all at once.

       Here's a basic period expression specifying the first quarter of 2009.  Note, hledger always treats start
       dates as inclusive and end dates as exclusive:

       -p "from 2009/1/1 to 2009/4/1"

       Keywords like "from" and "to" are optional, and so are the spaces, as long as you  don't  run  two  dates
       together.  "to" can also be written as ".." or "-".  These are equivalent to the above:

       -p "2009/1/1 2009/4/1"
       -p2009/1/1to2009/4/1
       -p2009/1/1..2009/4/1

       Dates are smart dates, so if the current year is 2009, the above can also be written as:

       -p "1/1 4/1"
       -p "january-apr"
       -p "this year to 4/1"

       If you specify only one date, the missing start or end date will be the earliest or latest transaction in
       your journal:

       -p "from 2009/1/1"   everything after january 1, 2009
       -p "from 2009/1"     the same
       -p "from 2009"       the same
       -p "to 2009"         everything before january 1, 2009

       A single date with no "from" or "to" defines both the start and end date like so:

       -p "2009"       the    year   2009;   equivalent   to
                       “2009/1/1 to 2010/1/1”
       -p "2009/1"     the  month  of  jan;  equivalent   to
                       “2009/1/1 to 2009/2/1”
       -p "2009/1/1"   just    that   day;   equivalent   to
                       “2009/1/1 to 2009/1/2”

       Or you can specify a single quarter like so:

       -p "2009Q1"   first quarter of 2009, equivalent  to
                     “2009/1/1 to 2009/4/1”
       -p "q4"       fourth quarter of the current year

       The  argument of -p can also begin with, or be, a report interval expression.  The basic report intervals
       are daily, weekly, monthly, quarterly, or yearly, which have the same effect as the  -D,-W,-M,-Q,  or  -Y
       flags.  Between report interval and start/end dates (if any), the word in is optional.  Examples:

       -p "weekly from 2009/1/1 to 2009/4/1"
       -p "monthly in 2008"
       -p "quarterly"

       Note  that  weekly,  monthly,  quarterly and yearly intervals will always start on the first day on week,
       month, quarter or year accordingly, and will end on the last day  of  same  period,  even  if  associated
       period expression specifies different explicit start and end date.

       For example:

       -p  "weekly from 2009/1/1   starts  on  2008/12/29,  closest   preceding
       to 2009/4/1"                Monday
       -p       "monthly      in   starts on 2018/11/01
       2008/11/25"
       -p    "quarterly     from   starts  on  2009/04/01,  ends on 2009/06/30,
       2009-05-05 to 2009-06-01"   which are first and last days of Q2 2009
       -p      "yearly      from   starts on 2009/01/01, first day of 2009
       2009-12-29"

       The  following  more complex report intervals are also supported: biweekly, fortnightly, bimonthly, every
       day|week|month|quarter|year, every N days|weeks|months|quarters|years.

       All of these will start on the first day of the requested period and end on the last  one,  as  described
       above.

       Examples:

       -p "bimonthly from 2008"    periods  will have boundaries on 2008/01/01,
                                   2008/03/01, ...
       -p "every 2 weeks"          starts on closest preceding Monday
       -p "every  5  month  from   periods  will have boundaries on 2009/03/01,
       2009/03"                    2009/08/01, ...

       If you want intervals that start on arbitrary day of your choosing and span a week, month  or  year,  you
       need to use any of the following:

       every  Nth  day  of  week, every <weekday>, every Nth day [of month], every Nth weekday [of month], every
       MM/DD [of year], every Nth MMM [of year], every MMM Nth [of year].

       Examples:

       -p  "every  2nd  day  of   periods will go from Tue to Tue
       week"
       -p "every Tue"             same
       -p "every 15th day"        period  boundaries  will  be  on  15th of each
                                  month
       -p "every 2nd Monday"      period boundaries will be on second Monday  of
                                  each month
       -p "every 11/05"           yearly periods with boundaries on 5th of Nov
       -p "every 5th Nov"         same
       -p "every Nov 5th"         same

       Show historical balances at end of 15th each month (N is exclusive end date):

       hledger balance -H -p "every 16th day"

       Group postings from start of wednesday to end of next tuesday (N is start date and exclusive end date):

       hledger register checking -p "every 3rd day of week"

   Depth limiting
       With  the  --depth  N option (short form: -N), commands like account, balance and register will show only
       the uppermost accounts in the account tree, down to level N.  Use this when you want a summary with  less
       detail.   This  flag  has  the  same  effect  as a depth: query argument (so -2, --depth=2 or depth:2 are
       equivalent).

   Pivoting
       Normally hledger sums amounts, and organizes them in a hierarchy, based on  account  name.   The  --pivot
       FIELD  option  causes  it  to  sum and organize hierarchy based on the value of some other field instead.
       FIELD can be: code, description, payee, note, or the full name (case insensitive) of any  tag.   As  with
       account names, values containing colon:separated:parts will be displayed hierarchically in reports.

       --pivot  is  a  general  option  affecting all reports; you can think of hledger transforming the journal
       before any other processing, replacing every posting's account name with the value of the specified field
       on that posting, inheriting it from the transaction or using a blank value if it's not present.

       An example:

              2016/02/16 Member Fee Payment
                  assets:bank account                    2 EUR
                  income:member fees                    -2 EUR  ; member: John Doe

       Normal balance report showing account names:

              $ hledger balance
                             2 EUR  assets:bank account
                            -2 EUR  income:member fees
              --------------------
                                 0

       Pivoted balance report, using member: tag values instead:

              $ hledger balance --pivot member
                             2 EUR
                            -2 EUR  John Doe
              --------------------
                                 0

       One way to show only amounts with a member: value (using a query, described below):

              $ hledger balance --pivot member tag:member=.
                            -2 EUR  John Doe
              --------------------
                            -2 EUR

       Another way (the acct: query matches against the pivoted "account name"):

              $ hledger balance --pivot member acct:.
                            -2 EUR  John Doe
              --------------------
                            -2 EUR

   Valuation
       Instead of reporting amounts in their original commodity, hledger can convert them  to  cost/sale  amount
       (using the conversion rate recorded in the transaction), or to market value (using some market price on a
       certain  date).   This  is  controlled  by  the  --value=TYPE[,COMMODITY] option, but we also provide the
       simpler -B/-V/-X flags, and usually one of those is all you need.

   -B: Cost
       The -B/--cost flag converts amounts to their cost or sale amount at transaction  time,  if  they  have  a
       transaction price specified.

   -V: Value
       The  -V/--market  flag  converts  amounts to market value in their default valuation commodity, using the
       market prices in effect on the valuation date(s), if any.  More on these in a minute.

   -X: Value in specified commodity
       The -X/--exchange=COMM option is like -V, except you tell it which currency you want to convert  to,  and
       it tries to convert everything to that.

   Valuation date
       Since  market prices can change from day to day, market value reports have a valuation date (or more than
       one), which determines which market prices will be used.

       For single period reports, if an explicit report end  date  is  specified,  that  will  be  used  as  the
       valuation date; otherwise the valuation date is "today".

       For multiperiod reports, each column/period is valued on the last day of the period.

   Market prices
       (experimental)

       To  convert a commodity A to its market value in another commodity B, hledger looks for a suitable market
       price (exchange rate) as follows, in this order of preference :

       1. A declared market price or inferred market price: A's latest market  price  in  B  on  or  before  the
          valuation  date  as  declared  by  a P directive, or (if the --infer-value flag is used) inferred from
          transaction prices.

       2. A reverse market price: the inverse of a declared or inferred market price from B to A.

       3. A chained market price: a synthetic price formed by combining the shortest chain of market prices (any
          of the above types) leading from A to B.

       Amounts for which no applicable market price can be found, are not converted.

   --infer-value: market prices from transactions
       (experimental)

       Normally, market value in hledger is fully controlled by, and requires, P  directives  in  your  journal.
       Since  adding  and  updating  those can be a chore, and since transactions usually take place at close to
       market value, why not use the recorded transaction prices as additional market prices (as Ledger does)  ?
       We could produce value reports without needing P directives at all.

       Adding  the --infer-value flag to -V, -X or --value enables this.  So for example, hledger bs -V --infer-
       value will get market prices both from P directives and from transactions.

       There is a downside: value reports can sometimes be affected in confusing/undesired ways by your  journal
       entries.  If this happens to you, read all of this Valuation section carefully, and try adding --debug or
       --debug=2 to troubleshoot.

       --infer-value can infer market prices from:

       • multicommodity transactions with explicit prices (@/@@)

       • multicommodity transactions with implicit prices (no @, two commodities, unbalanced).  (With these, the
         order of postings matters.  hledger print -x can be useful for troubleshooting.)

       • but  not,  currently,  from  "more  correct"  multicommodity  transactions (no @, multiple commodities,
         balanced).

   Valuation commodity
       (experimental)

       When you specify a valuation commodity (-X COMM or --value TYPE,COMM):
       hledger will convert all amounts to COMM, wherever it can find a  suitable  market  price  (including  by
       reversing or chaining prices).

       When you leave the valuation commodity unspecified (-V or --value TYPE):
       For  each  commodity  A,  hledger  picks  a  default  valuation  commodity  as  follows, in this order of
       preference:

       1. The price commodity from the latest P-declared market price for A on or before valuation date.

       2. The price commodity from the latest P-declared market price for A on any date.  (Allows conversion  to
          proceed when there are inferred prices before the valuation date.)

       3. If  there  are  no P directives at all (any commodity or date) and the --infer-value flag is used: the
          price commodity from the latest transaction-inferred price for A on or before valuation date.

       This means:

       • If you have P directives, they determine which commodities -V will convert, and to what.

       • If you have no P directives, and use the --infer-value flag, transaction prices determine it.

       Amounts for which no valuation commodity can be found are not converted.

   Simple valuation examples
       Here are some quick examples of -V:

              ; one euro is worth this many dollars from nov 1
              P 2016/11/01 € $1.10

              ; purchase some euros on nov 3
              2016/11/3
                  assets:euros        €100
                  assets:checking

              ; the euro is worth fewer dollars by dec 21
              P 2016/12/21 € $1.03

       How many euros do I have ?

              $ hledger -f t.j bal -N euros
                              €100  assets:euros

       What are they worth at end of nov 3 ?

              $ hledger -f t.j bal -N euros -V -e 2016/11/4
                           $110.00  assets:euros

       What are they worth after 2016/12/21 ?  (no report end date specified, defaults to today)

              $ hledger -f t.j bal -N euros -V
                           $103.00  assets:euros

   --value: Flexible valuation
       -B, -V and -X are special cases of the more general --value option:

               --value=TYPE[,COMM]  TYPE is cost, then, end, now or YYYY-MM-DD.
                                    COMM is an optional commodity symbol.
                                    Shows amounts converted to:
                                    - cost commodity using transaction prices (then optionally to COMM using market prices at period end(s))
                                    - default valuation commodity (or COMM) using market prices at posting dates
                                    - default valuation commodity (or COMM) using market prices at period end(s)
                                    - default valuation commodity (or COMM) using current market prices
                                    - default valuation commodity (or COMM) using market prices at some date

       The TYPE part selects cost or value and valuation date:

       --value=cost
              Convert amounts to cost, using the prices recorded in transactions.

       --value=then
              Convert amounts to their value in the default valuation commodity, using  market  prices  on  each
              posting's date.  This is currently supported only by the print and register commands.

       --value=end
              Convert amounts to their value in the default valuation commodity, using market prices on the last
              day  of  the report period (or if unspecified, the journal's end date); or in multiperiod reports,
              market prices on the last day of each subperiod.

       --value=now
              Convert amounts to their value in the default valuation commodity using current market prices  (as
              of when report is generated).

       --value=YYYY-MM-DD
              Convert  amounts  to  their  value  in the default valuation commodity using market prices on this
              date.

       To select a different valuation commodity, add  the  optional  ,COMM  part:  a  comma,  then  the  target
       commodity's symbol.  Eg: --value=now,EUR.  hledger will do its best to convert amounts to this commodity,
       deducing market prices as described above.

   More valuation examples
       Here are some examples showing the effect of --value, as seen with print:

              P 2000-01-01 A  1 B
              P 2000-02-01 A  2 B
              P 2000-03-01 A  3 B
              P 2000-04-01 A  4 B

              2000-01-01
                (a)      1 A @ 5 B

              2000-02-01
                (a)      1 A @ 6 B

              2000-03-01
                (a)      1 A @ 7 B

       Show the cost of each posting:

              $ hledger -f- print --value=cost
              2000-01-01
                  (a)             5 B

              2000-02-01
                  (a)             6 B

              2000-03-01
                  (a)             7 B

       Show the value as of the last day of the report period (2000-02-29):

              $ hledger -f- print --value=end date:2000/01-2000/03
              2000-01-01
                  (a)             2 B

              2000-02-01
                  (a)             2 B

       With no report period specified, that shows the value as of the last day of the journal (2000-03-01):

              $ hledger -f- print --value=end
              2000-01-01
                  (a)             3 B

              2000-02-01
                  (a)             3 B

              2000-03-01
                  (a)             3 B

       Show the current value (the 2000-04-01 price is still in effect today):

              $ hledger -f- print --value=now
              2000-01-01
                  (a)             4 B

              2000-02-01
                  (a)             4 B

              2000-03-01
                  (a)             4 B

       Show the value on 2000/01/15:

              $ hledger -f- print --value=2000-01-15
              2000-01-01
                  (a)             1 B

              2000-02-01
                  (a)             1 B

              2000-03-01
                  (a)             1 B

       You may need to explicitly set a commodity's display style, when reverse prices are used.  Eg this output
       might be surprising:

              P 2000-01-01 A 2B

              2000-01-01
                a  1B
                b

              $ hledger print -x -X A
              2000-01-01
                  a               0
                  b               0

       Explanation: because there's no amount or commodity directive specifying a display style for A, 0.5A gets
       the  default  style,  which  shows  no decimal digits.  Because the displayed amount looks like zero, the
       commodity symbol and minus sign are not displayed either.  Adding  a  commodity  directive  sets  a  more
       useful display style for A:

              P 2000-01-01 A 2B
              commodity 0.00A

              2000-01-01
                a  1B
                b

              $ hledger print -X A
              2000-01-01
                  a           0.50A
                  b          -0.50A

   Effect of valuation on reports
       Here  is  a  reference  for  how  valuation  is  supposed to affect each part of hledger's reports (and a
       glossary).  (It's wide, you'll have to scroll sideways.) It may be useful when troubleshooting.   If  you
       find problems, please report them, ideally with a reproducible example.  Related: #329, #1083.

       Report type       -B,             -V, -X          --value=then    --value=end     --value=DATE,
                         --value=cost                                                    --value=now
       ────────────────────────────────────────────────────────────────────────────────────────────────
       print
       posting           cost            value     at    value      at   value     at    value      at
       amounts                           report   end    posting date    report    or    DATE/today
                                         or today                        journal end
       balance           unchanged       unchanged       unchanged       unchanged       unchanged
       assertions /
       assignments

       register
       starting          cost            value at day    not supported   value at day    value      at
       balance                           before                          before          DATE/today
       (with -H)                         report    or                    report    or
                                         journal                         journal
                                         start                           start
       posting           cost            value     at    value      at   value     at    value      at
       amounts  (no                      report   end    posting date    report    or    DATE/today
       report                            or today                        journal end
       interval)
       summary           summarised      value     at    sum        of   value     at    value      at
       posting           cost            period ends     postings   in   period ends     DATE/today
       amounts                                           interval,
       (with report                                      valued     at
       interval)                                         interval
                                                         start
       running           sum/average     sum/average     sum/average     sum/average     sum/average
       total/average     of displayed    of displayed    of  displayed   of displayed    of  displayed
                         values          values          values          values          values

       balance  (bs,
       bse,      cf,
       is..)
       balances  (no     sums      of    value     at    not supported   value     at    value      at
       report            costs           report   end                    report    or    DATE/today of
       interval)                         or  today of                    journal  end    sums       of
                                         sums      of                    of  sums  of    postings
                                         postings                        postings
       balances          sums      of    value     at    not supported   value     at    value      at
       (with  report     costs           period  ends                    period  ends    DATE/today of
       interval)                         of  sums  of                    of  sums  of    sums       of
                                         postings                        postings        postings
       starting          sums      of    sums      of    not supported   sums      of    sums       of
       balances          costs     of    postings                        postings        postings
       (with  report     postings        before                          before          before report
       interval  and     before          report start                    report start    start
       -H)               report start
       budget            like            like            not supported   like            like balances
       amounts  with     balances        balances                        balances
       --budget
       grand   total     sum       of    sum       of    not supported   sum       of    sum        of
       (no    report     displayed       displayed                       displayed       displayed
       interval)         values          values                          values          values
       row               sums/averages   sums/averages   not supported   sums/averages   sums/averages
       totals/averages   of displayed    of displayed                    of displayed    of  displayed
       (with  report     values          values                          values          values
       interval)
       column totals     sums       of   sums       of   not supported   sums       of   sums       of
                         displayed       displayed                       displayed       displayed
                         values          values                          values          values
       grand             sum/average     sum/average     not supported   sum/average     sum/average
       total/average     of     column   of     column                   of     column   of     column
                         totals          totals                          totals          totals

       Glossary:

       cost   calculated using price(s) recorded in the transaction(s).

       value  market  value  using available market price declarations, or the unchanged amount if no conversion
              rate can be found.

       report start
              the first day of the report period specified with -b or -p or date:, otherwise today.

       report or journal start
              the first day of the report period specified with -b  or  -p  or  date:,  otherwise  the  earliest
              transaction date in the journal, otherwise today.

       report end
              the last day of the report period specified with -e or -p or date:, otherwise today.

       report or journal end
              the  last  day  of  the  report  period  specified  with  -e  or -p or date:, otherwise the latest
              transaction date in the journal, otherwise today.

       report interval
              a flag (-D/-W/-M/-Q/-Y) or  period  expression  that  activates  the  report's  multi-period  mode
              (whether showing one or many subperiods).

COMMANDS

       hledger provides a number of subcommands; hledger with no arguments shows a list.

       If  you  install  additional  hledger-* packages, or if you put programs or scripts named hledger-NAME in
       your PATH, these will also be listed as subcommands.

       Run a subcommand by writing its name as first argument (eg hledger incomestatement).  You can also  write
       one  of  the  standard short aliases displayed in parentheses in the command list (hledger b), or any any
       unambiguous prefix of a command name (hledger inc).

       Here are all the builtin commands in alphabetical order.  See also hledger for a more  organised  command
       list, and hledger CMD -h for detailed command help.

   accounts
       accounts, a
       Show account names.

       This  command  lists  account  names,  either  declared  with  account directives (--declared), posted to
       (--used), or both (the default).  With query arguments, only matched  account  names  and  account  names
       referenced  by  matched  postings  are  shown.   It  shows  a flat list by default.  With --tree, it uses
       indentation to show the account hierarchy.  In flat mode you can add --drop  N  to  omit  the  first  few
       account name components.  Account names can be depth-clipped with depth:N or --depth N or -N.

       Examples:

              $ hledger accounts
              assets:bank:checking
              assets:bank:saving
              assets:cash
              expenses:food
              expenses:supplies
              income:gifts
              income:salary
              liabilities:debts

   activity
       activity
       Show an ascii barchart of posting counts per interval.

       The  activity command displays an ascii histogram showing transaction counts by day, week, month or other
       reporting interval (by day is the default).  With query arguments, it counts only matched transactions.

       Examples:

              $ hledger activity --quarterly
              2008-01-01 **
              2008-04-01 *******
              2008-07-01
              2008-10-01 **

   add
       add
       Prompt for transactions and add them to the journal.  Any arguments will be used as  default  inputs  for
       the first N prompts.

       Many  hledger users edit their journals directly with a text editor, or generate them from CSV.  For more
       interactive data entry, there is the add command, which prompts interactively  on  the  console  for  new
       transactions, and appends them to the journal file (if there are multiple -f FILE options, the first file
       is  used.)  Existing  transactions  are not changed.  This is the only hledger command that writes to the
       journal file.

       To use it, just run hledger add and follow the prompts.  You can add as many transactions  as  you  like;
       when you are finished, enter . or press control-d or control-c to exit.

       Features:

       • add  tries  to  provide  useful  defaults,  using  the most similar (by description) recent transaction
         (filtered by the query, if any) as a template.

       • You can also set the initial defaults with command line arguments.

       • Readline-style edit keys can be used during data entry.

       • The tab key will auto-complete whenever possible - accounts,  descriptions,  dates  (yesterday,  today,
         tomorrow).  If the input area is empty, it will insert the default value.

       • If the journal defines a default commodity, it will be added to any bare numbers entered.

       • A parenthesised transaction code may be entered following a date.

       • Comments and tags may be entered following a description or amount.

       • If you make a mistake, enter < at any prompt to go one step backward.

       • Input prompts are displayed in a different colour when the terminal supports it.

       Example (see the tutorial for a detailed explanation):

              $ hledger add
              Adding transactions to journal file /src/hledger/examples/sample.journal
              Any command line arguments will be used as defaults.
              Use tab key to complete, readline keys to edit, enter to accept defaults.
              An optional (CODE) may follow transaction dates.
              An optional ; COMMENT may follow descriptions or amounts.
              If you make a mistake, enter < at any prompt to go one step backward.
              To end a transaction, enter . when prompted.
              To quit, enter . at a date prompt or press control-d or control-c.
              Date [2015/05/22]:
              Description: supermarket
              Account 1: expenses:food
              Amount  1: $10
              Account 2: assets:checking
              Amount  2 [$-10.0]:
              Account 3 (or . or enter to finish this transaction): .
              2015/05/22 supermarket
                  expenses:food             $10
                  assets:checking        $-10.0

              Save this transaction to the journal ? [y]:
              Saved.
              Starting the next transaction (. or ctrl-D/ctrl-C to quit)
              Date [2015/05/22]: <CTRL-D> $

       On  Microsoft  Windows,  the  add command makes sure that no part of the file path ends with a period, as
       that would cause problems (#1056).

   aregister
       aregister, areg
       Show transactions affecting a particular account, and the account's running balance.

       aregister shows the transactions affecting a particular account (and its subaccounts), from the point  of
       view of that account.  Each line shows:

       • the transaction's (or posting's, see below) date

       • the names of the other account(s) involved

       • the net change to this account's balance

       • the  account's  historical running balance (including balance from transactions before the report start
         date).

       With aregister, each line represents a whole transaction - as in hledger-ui, hledger-web, and  your  bank
       statement.   By contrast, the register command shows individual postings, across all accounts.  You might
       prefer aregister for reconciling with real-world asset/liability accounts,  and  register  for  reviewing
       detailed revenues/expenses.

       An  account  must be specified as the first argument, which should be the full account name or an account
       pattern (regular expression).  aregister will show transactions in this account (the first  one  matched)
       and any of its subaccounts.

       Any additional arguments form a query which will filter the transactions shown.

       Transactions making a net change of zero are not shown by default; add the -E/--empty flag to show them.

   aregister and custom posting dates
       Transactions  whose  date is outside the report period can still be shown, if they have a posting to this
       account dated inside the report period.  (And in this case it's the posting date  that  is  shown.)  This
       ensures  that  aregister  can  show  an  accurate  historical  running balance, matching the one shown by
       register -H with the same arguments.

       To filter strictly by transaction date instead, add the --txn-dates flag.  If you use this flag and  some
       of your postings have custom dates, it's probably best to assume the running balance is wrong.

   Output format
       This  command also supports the output destination and output format options The output formats supported
       are txt, csv, and json.

       Examples:

       Show all transactions and historical running balance in the first account whose name contains "checking":

              $ hledger areg checking

       Show transactions and historical running balance in all asset accounts during july:

              $ hledger areg assets date:jul

   balance
       balance, bal, b
       Show accounts and their balances.

       The balance command is hledger's most versatile command.  Note, despite the name, it is not  always  used
       for  showing  real-world account balances; the more accounting-aware balancesheet and incomestatement may
       be more convenient for that.

       By default, it displays all accounts, and each account's change in balance during the  entire  period  of
       the  journal.   Balance  changes are calculated by adding up the postings in each account.  You can limit
       the postings matched, by a query, to see fewer accounts, changes over a different  time  period,  changes
       from only cleared transactions, etc.

       If  you include an account's complete history of postings in the report, the balance change is equivalent
       to the account's current ending balance.   For  a  real-world  account,  typically  you  won't  have  all
       transactions  in  the journal; instead you'll have all transactions after a certain date, and an "opening
       balances" transaction setting the correct starting balance on that date.  Then the balance  command  will
       show  real-world  account  balances.  In some cases the -H/--historical flag is used to ensure this (more
       below).

       The balance command can produce several styles of report:

   Classic balance report
       This is the original balance report, as found in Ledger.  It usually looks like this:

              $ hledger balance
                               $-1  assets
                                $1    bank:saving
                               $-2    cash
                                $2  expenses
                                $1    food
                                $1    supplies
                               $-2  income
                               $-1    gifts
                               $-1    salary
                                $1  liabilities:debts
              --------------------
                                 0

       By default, accounts are displayed hierarchically, with subaccounts indented below their parent.  At each
       level of the tree, accounts are sorted by account code if any, then by account name.  Or with  -S/--sort-
       amount, by their balance amount, largest first.

       "Boring"  accounts, which contain a single interesting subaccount and no balance of their own, are elided
       into the following line for more compact output.  (Eg above, the "liabilities" account.)  Use  --no-elide
       to prevent this.

       Account balances are "inclusive" - they include the balances of any subaccounts.

       Accounts which have zero balance (and no non-zero subaccounts) are omitted.  Use -E/--empty to show them.

       A final total is displayed by default; use -N/--no-total to suppress it, eg:

              $ hledger balance -p 2008/6 expenses --no-total
                                $2  expenses
                                $1    food
                                $1    supplies

   Customising the classic balance report
       You can customise the layout of classic balance reports with --format FMT:

              $ hledger balance --format "%20(account) %12(total)"
                            assets          $-1
                       bank:saving           $1
                              cash          $-2
                          expenses           $2
                              food           $1
                          supplies           $1
                            income          $-2
                             gifts          $-1
                            salary          $-1
                 liabilities:debts           $1
              ---------------------------------
                                              0

       The FMT format string (plus a newline) specifies the formatting applied to each account/balance pair.  It
       may contain any suitable text, with data fields interpolated like so:

       %[MIN][.MAX](FIELDNAME)

       • MIN pads with spaces to at least this width (optional)

       • MAX truncates at this width (optional)

       • FIELDNAME must be enclosed in parentheses, and can be one of:

         • depth_spacer  -  a number of spaces equal to the account's depth, or if MIN is specified, MIN * depth
           spaces.

         • account - the account's name

         • total - the account's balance/posted total, right justified

       Also, FMT can begin with an optional prefix to control how multi-commodity amounts are rendered:

       • %_ - render on multiple lines, bottom-aligned (the default)

       • %^ - render on multiple lines, top-aligned

       • %, - render on one line, comma-separated

       There are some quirks.  Eg in one-line mode,  %(depth_spacer)  has  no  effect,  instead  %(account)  has
       indentation built in.  Experimentation may be needed to get pleasing results.

       Some example formats:

       • %(total) - the account's total

       • %-20.20(account)  -  the  account's  name,  left  justified,  padded to 20 characters and clipped at 20
         characters

       • %,%-50(account)  %25(total) - account name padded to 50 characters, total padded to 20 characters, with
         multiple commodities rendered on one line

       • %20(total)  %2(depth_spacer)%-(account) - the default format for the single-column balance report

   Colour support
       In terminal output, when colour is enabled, the balance command shows negative amounts in red.

   Flat mode
       To see a flat list instead of the default hierarchical display,  use  --flat.   In  this  mode,  accounts
       (unless  depth-clipped) show their full names and "exclusive" balance, excluding any subaccount balances.
       In this mode, you can also use --drop N to omit the first few account name components.

              $ hledger balance -p 2008/6 expenses -N --flat --drop 1
                                $1  food
                                $1  supplies

   Depth limited balance reports
       With --depth N or depth:N or just -N, balance reports show accounts only to the specified numeric  depth.
       This is very useful to summarise a complex set of accounts and get an overview.

              $ hledger balance -N -1
                               $-1  assets
                                $2  expenses
                               $-2  income
                                $1  liabilities

       Flat-mode  balance  reports, which normally show exclusive balances, show inclusive balances at the depth
       limit.

   Percentages
       With -% or --percent, balance reports show each account's value expressed as a percentage of the column's
       total.  This is useful to get an overview of the relative sizes of  account  balances.   For  example  to
       obtain an overview of expenses:

              $ hledger balance expenses -%
                           100.0 %  expenses
                            50.0 %    food
                            50.0 %    supplies
              --------------------
                           100.0 %

       Note  that --tree does not have an effect on -%.  The percentages are always relative to the total sum of
       each column, they are never relative to the parent account.

       Since the percentages are relative to the columns sum, it is usually not useful to calculate  percentages
       if  the  signs  of  the  amounts  are mixed.  Although the results are technically correct, they are most
       likely useless.  Especially in a balance report that  sums  up  to  zero  (eg  hledger  balance  -B)  all
       percentage values will be zero.

       This  flag  does  not  work  if  the  report  contains  any mixed commodity accounts.  If there are mixed
       commodity accounts in the report be sure to use -V or -B  to  coerce  the  report  into  using  a  single
       commodity.

   Multicolumn balance report
       Multicolumn  or  tabular  balance  reports  are  a very useful hledger feature, and usually the preferred
       style.  They share many of the above features, but  they  show  the  report  as  a  table,  with  columns
       representing time periods.  This mode is activated by providing a reporting interval.

       There are three types of multicolumn balance report, showing different information:

       1. By  default:  each column shows the sum of postings in that period, ie the account's change of balance
          in that period.  This is useful eg for a monthly income statement:

                  $ hledger balance --quarterly income expenses -E
                  Balance changes in 2008:

                                     ||  2008q1  2008q2  2008q3  2008q4
                  ===================++=================================
                   expenses:food     ||       0      $1       0       0
                   expenses:supplies ||       0      $1       0       0
                   income:gifts      ||       0     $-1       0       0
                   income:salary     ||     $-1       0       0       0
                  -------------------++---------------------------------
                                     ||     $-1      $1       0       0

       2. With --cumulative: each column shows the ending balance for  that  period,  accumulating  the  changes
          across periods, starting from 0 at the report start date:

                  $ hledger balance --quarterly income expenses -E --cumulative
                  Ending balances (cumulative) in 2008:

                                     ||  2008/03/31  2008/06/30  2008/09/30  2008/12/31
                  ===================++=================================================
                   expenses:food     ||           0          $1          $1          $1
                   expenses:supplies ||           0          $1          $1          $1
                   income:gifts      ||           0         $-1         $-1         $-1
                   income:salary     ||         $-1         $-1         $-1         $-1
                  -------------------++-------------------------------------------------
                                     ||         $-1           0           0           0

       3. With  --historical/-H:  each  column  shows  the  actual  historical  ending  balance for that period,
          accumulating the changes across periods, starting from the actual balance at the  report  start  date.
          This  is  useful  eg  for a multi-period balance sheet, and when you are showing only the data after a
          certain start date:

                  $ hledger balance ^assets ^liabilities --quarterly --historical --begin 2008/4/1
                  Ending balances (historical) in 2008/04/01-2008/12/31:

                                        ||  2008/06/30  2008/09/30  2008/12/31
                  ======================++=====================================
                   assets:bank:checking ||          $1          $1           0
                   assets:bank:saving   ||          $1          $1          $1
                   assets:cash          ||         $-2         $-2         $-2
                   liabilities:debts    ||           0           0          $1
                  ----------------------++-------------------------------------
                                        ||           0           0           0

       Note that --cumulative or --historical/-H disable --row-total/-T, since summing  end  balances  generally
       does not make sense.

       Multicolumn balance reports display accounts in flat mode by default; to see the hierarchy, use --tree.

       With  a  reporting  interval  (like  --quarterly  above),  the report start/end dates will be adjusted if
       necessary so that they encompass the displayed report periods.  This  is  so  that  the  first  and  last
       periods will be "full" and comparable to the others.

       The  -E/--empty  flag  does  two  things  in multicolumn balance reports: first, the report will show all
       columns within the specified report period (without -E, leading and trailing columns with all zeroes  are
       not shown).  Second, all accounts which existed at the report start date will be considered, not just the
       ones  with  activity  during  the  report  period  (use  -E  to include low-activity accounts which would
       otherwise would be omitted).

       The -T/--row-total flag adds an additional column showing the total for each row.

       The -A/--average flag adds a column showing the average value in each row.

       Here's an example of all three:

              $ hledger balance -Q income expenses --tree -ETA
              Balance changes in 2008:

                          ||  2008q1  2008q2  2008q3  2008q4    Total  Average
              ============++===================================================
               expenses   ||       0      $2       0       0       $2       $1
                 food     ||       0      $1       0       0       $1        0
                 supplies ||       0      $1       0       0       $1        0
               income     ||     $-1     $-1       0       0      $-2      $-1
                 gifts    ||       0     $-1       0       0      $-1        0
                 salary   ||     $-1       0       0       0      $-1        0
              ------------++---------------------------------------------------
                          ||     $-1      $1       0       0        0        0

              (Average is rounded to the dollar here since all journal amounts are)

       The --transpose flag can be used to exchange the rows and columns of a multicolumn report.

       When showing multicommodity amounts, multicolumn balance reports will elide any amounts which  have  more
       than  two  commodities,  since otherwise columns could get very wide.  The --no-elide flag disables this.
       Hiding totals with the -N/--no-total flag can also help reduce the width of multicommodity reports.

       When the report is still too wide, a good workaround is to pipe it into less -RS (-R for  colour,  -S  to
       chop long lines).  Eg: hledger bal -D --color=yes | less -RS.

   Budget report
       With  --budget,  extra  columns  are  displayed showing budget goals for each account and period, if any.
       Budget goals are defined by periodic transactions.  This is very useful for comparing planned and  actual
       income, expenses, time usage, etc.  --budget is most often combined with a report interval.

       For  example,  you  can  take  average  monthly  expenses in the common expense categories to construct a
       minimal monthly budget:

              ;; Budget
              ~ monthly
                income  $2000
                expenses:food    $400
                expenses:bus     $50
                expenses:movies  $30
                assets:bank:checking

              ;; Two months worth of expenses
              2017-11-01
                income  $1950
                expenses:food    $396
                expenses:bus     $49
                expenses:movies  $30
                expenses:supplies  $20
                assets:bank:checking

              2017-12-01
                income  $2100
                expenses:food    $412
                expenses:bus     $53
                expenses:gifts   $100
                assets:bank:checking

       You can now see a monthly budget report:

              $ hledger balance -M --budget
              Budget performance in 2017/11/01-2017/12/31:

                                    ||                      Nov                       Dec
              ======================++====================================================
               assets               || $-2445 [  99% of $-2480]  $-2665 [ 107% of $-2480]
               assets:bank          || $-2445 [  99% of $-2480]  $-2665 [ 107% of $-2480]
               assets:bank:checking || $-2445 [  99% of $-2480]  $-2665 [ 107% of $-2480]
               expenses             ||   $495 [ 103% of   $480]    $565 [ 118% of   $480]
               expenses:bus         ||    $49 [  98% of    $50]     $53 [ 106% of    $50]
               expenses:food        ||   $396 [  99% of   $400]    $412 [ 103% of   $400]
               expenses:movies      ||    $30 [ 100% of    $30]       0 [   0% of    $30]
               income               ||  $1950 [  98% of  $2000]   $2100 [ 105% of  $2000]
              ----------------------++----------------------------------------------------
                                    ||      0 [              0]       0 [              0]

       This is different from a normal balance report in several ways:

       • Only accounts with budget goals during the report period are shown, by default.

       • In each column, in square brackets after the actual amount, budget goal  amounts  are  shown,  and  the
         actual/goal percentage.  (Note: budget goals should be in the same commodity as the actual amount.)

       • All parent accounts are always shown, even in flat mode.  Eg assets, assets:bank, and expenses above.

       • Amounts always include all subaccounts, budgeted or unbudgeted, even in flat mode.

       This  means  that  the  numbers  displayed  will  not always add up! Eg above, the expenses actual amount
       includes the gifts and supplies transactions, but the expenses:gifts and expenses:supplies  accounts  are
       not shown, as they have no budget amounts declared.

       This  can be confusing.  When you need to make things clearer, use the -E/--empty flag, which will reveal
       all accounts including unbudgeted ones, giving the full picture.  Eg:

              $ hledger balance -M --budget --empty
              Budget performance in 2017/11/01-2017/12/31:

                                    ||                      Nov                       Dec
              ======================++====================================================
               assets               || $-2445 [  99% of $-2480]  $-2665 [ 107% of $-2480]
               assets:bank          || $-2445 [  99% of $-2480]  $-2665 [ 107% of $-2480]
               assets:bank:checking || $-2445 [  99% of $-2480]  $-2665 [ 107% of $-2480]
               expenses             ||   $495 [ 103% of   $480]    $565 [ 118% of   $480]
               expenses:bus         ||    $49 [  98% of    $50]     $53 [ 106% of    $50]
               expenses:food        ||   $396 [  99% of   $400]    $412 [ 103% of   $400]
               expenses:gifts       ||      0                      $100
               expenses:movies      ||    $30 [ 100% of    $30]       0 [   0% of    $30]
               expenses:supplies    ||    $20                         0
               income               ||  $1950 [  98% of  $2000]   $2100 [ 105% of  $2000]
              ----------------------++----------------------------------------------------
                                    ||      0 [              0]       0 [              0]

       You can roll over unspent budgets to next period with --cumulative:

              $ hledger balance -M --budget --cumulative
              Budget performance in 2017/11/01-2017/12/31:

                                    ||                      Nov                       Dec
              ======================++====================================================
               assets               || $-2445 [  99% of $-2480]  $-5110 [ 103% of $-4960]
               assets:bank          || $-2445 [  99% of $-2480]  $-5110 [ 103% of $-4960]
               assets:bank:checking || $-2445 [  99% of $-2480]  $-5110 [ 103% of $-4960]
               expenses             ||   $495 [ 103% of   $480]   $1060 [ 110% of   $960]
               expenses:bus         ||    $49 [  98% of    $50]    $102 [ 102% of   $100]
               expenses:food        ||   $396 [  99% of   $400]    $808 [ 101% of   $800]
               expenses:movies      ||    $30 [ 100% of    $30]     $30 [  50% of    $60]
               income               ||  $1950 [  98% of  $2000]   $4050 [ 101% of  $4000]
              ----------------------++----------------------------------------------------
                                    ||      0 [              0]       0 [              0]

       For more examples, see Budgeting and Forecasting.

   Nested budgets
       You can add budgets to any account in your account hierarchy.  If you have budgets on both parent account
       and some of its children, then budget(s) of the child account(s) would be added to the  budget  of  their
       parent, much like account balances behave.

       In  the most simple case this means that once you add a budget to any account, all its parents would have
       budget as well.

       To illustrate this, consider the following budget:

              ~ monthly from 2019/01
                  expenses:personal             $1,000.00
                  expenses:personal:electronics    $100.00
                  liabilities

       With this, monthly budget for electronics is defined to be $100 and budget for personal  expenses  is  an
       additional $1000, which implicitly means that budget for both expenses:personal and expenses is $1100.

       Transactions  in  expenses:personal:electronics will be counted both towards its $100 budget and $1100 of
       expenses:personal , and transactions in any  other  subaccount  of  expenses:personal  would  be  counted
       towards only towards the budget of expenses:personal.

       For example, let's consider these transactions:

              ~ monthly from 2019/01
                  expenses:personal             $1,000.00
                  expenses:personal:electronics    $100.00
                  liabilities

              2019/01/01 Google home hub
                  expenses:personal:electronics          $90.00
                  liabilities                           $-90.00

              2019/01/02 Phone screen protector
                  expenses:personal:electronics:upgrades          $10.00
                  liabilities

              2019/01/02 Weekly train ticket
                  expenses:personal:train tickets       $153.00
                  liabilities

              2019/01/03 Flowers
                  expenses:personal          $30.00
                  liabilities

       As    you    can    see,    we    have   transactions   in   expenses:personal:electronics:upgrades   and
       expenses:personal:train tickets, and since both of these accounts are without explicitly defined  budget,
       these   transactions   would   be   counted   towards   budgets   of   expenses:personal:electronics  and
       expenses:personal accordingly:

              $ hledger balance --budget -M
              Budget performance in 2019/01:

                                             ||                           Jan
              ===============================++===============================
               expenses                      ||  $283.00 [  26% of  $1100.00]
               expenses:personal             ||  $283.00 [  26% of  $1100.00]
               expenses:personal:electronics ||  $100.00 [ 100% of   $100.00]
               liabilities                   || $-283.00 [  26% of $-1100.00]
              -------------------------------++-------------------------------
                                             ||        0 [                 0]

       And with --empty, we can get a better picture of budget allocation and consumption:

              $ hledger balance --budget -M --empty
              Budget performance in 2019/01:

                                                      ||                           Jan
              ========================================++===============================
               expenses                               ||  $283.00 [  26% of  $1100.00]
               expenses:personal                      ||  $283.00 [  26% of  $1100.00]
               expenses:personal:electronics          ||  $100.00 [ 100% of   $100.00]
               expenses:personal:electronics:upgrades ||   $10.00
               expenses:personal:train tickets        ||  $153.00
               liabilities                            || $-283.00 [  26% of $-1100.00]
              ----------------------------------------++-------------------------------
                                                      ||        0 [                 0]

   Output format
       This command also supports the output destination and output format options The output formats  supported
       are txt, csv, (multicolumn non-budget reports only) html, and (experimental) json.

   balancesheet
       balancesheet, bs
       This  command  displays  a  balance  sheet,  showing  historical  ending  balances of asset and liability
       accounts.  (To see equity as well, use the balancesheetequity command.) Amounts  are  shown  with  normal
       positive sign, as in conventional financial statements.

       The  asset  and  liability accounts shown are those accounts declared with the Asset or Cash or Liability
       type, or otherwise all accounts under a top-level asset or liability account (case  insensitive,  plurals
       allowed).

       Example:

              $ hledger balancesheet
              Balance Sheet

              Assets:
                               $-1  assets
                                $1    bank:saving
                               $-2    cash
              --------------------
                               $-1

              Liabilities:
                                $1  liabilities:debts
              --------------------
                                $1

              Total:
              --------------------
                                 0

       With  a  reporting  interval,  multiple  columns  will  be  shown,  one  for each report period.  As with
       multicolumn balance reports, you can  alter  the  report  mode  with  --change/--cumulative/--historical.
       Normally  balancesheet shows historical ending balances, which is what you need for a balance sheet; note
       this means it ignores report begin dates (and -T/--row-total, since summing end balances  generally  does
       not make sense).  Instead of absolute values percentages can be displayed with -%.

       This  command also supports the output destination and output format options The output formats supported
       are txt, csv, html, and (experimental) json.

   balancesheetequity
       balancesheetequity, bse
       This command displays a balance sheet, showing historical ending balances of asset, liability and  equity
       accounts.  Amounts are shown with normal positive sign, as in conventional financial statements.

       The  asset,  liability  and  equity  accounts  shown  are  those  accounts declared with the Asset, Cash,
       Liability or Equity type, or otherwise all accounts under a top-level asset, liability or equity  account
       (case insensitive, plurals allowed).

       Example:

              $ hledger balancesheetequity
              Balance Sheet With Equity

              Assets:
                               $-2  assets
                                $1    bank:saving
                               $-3    cash
              --------------------
                               $-2

              Liabilities:
                                $1  liabilities:debts
              --------------------
                                $1

              Equity:
                        $1  equity:owner
              --------------------
                        $1

              Total:
              --------------------
                                 0

       This  command also supports the output destination and output format options The output formats supported
       are txt, csv, html, and (experimental) json.

   cashflow
       cashflow, cf
       This command displays a cashflow statement, showing  the  inflows  and  outflows  affecting  "cash"  (ie,
       liquid) assets.  Amounts are shown with normal positive sign, as in conventional financial statements.

       The "cash" accounts shown are those accounts declared with the Cash type, or otherwise all accounts under
       a  top-level  asset  account  (case  insensitive,  plural  allowed)  which do not have fixed, investment,
       receivable or A/R in their name.

       Example:

              $ hledger cashflow
              Cashflow Statement

              Cash flows:
                               $-1  assets
                                $1    bank:saving
                               $-2    cash
              --------------------
                               $-1

              Total:
              --------------------
                               $-1

       With a reporting interval, multiple columns will be shown, one for each report period.  Normally cashflow
       shows changes in assets per period, though as with multicolumn balance reports you can alter  the  report
       mode  with  --change/--cumulative/--historical.   Instead of absolute values percentages can be displayed
       with -%.

       This command also supports the output destination and output format options The output formats  supported
       are txt, csv, html, and (experimental) json.

   check-dates
       check-dates
       Check  that  transactions  are  sorted by increasing date.  With --date2, checks secondary dates instead.
       With --strict, dates must also be unique.  With a query, only matched transactions'  dates  are  checked.
       Reads the default journal file, or another specified with -f.

   check-dupes
       check-dupes
       Reports  account  names  having the same leaf but different prefixes.  In other words, two or more leaves
       that are categorized differently.  Reads the default journal file, or another specified as an argument.

       An example: http://stefanorodighiero.net/software/hledger-dupes.html

   close
       close, equity
       Prints a "closing balances" transaction and an "opening balances" transaction that bring account balances
       to and from zero, respectively.  These can be added to your journal file(s), eg to bring  asset/liability
       balances  forward  into a new journal file, or to close out revenues/expenses to retained earnings at the
       end of a period.

       You can print just one of these transactions by using the --close or  --open  flag.   You  can  customise
       their descriptions with the --close-desc and --open-desc options.

       One  amountless  posting  to  "equity:opening/closing  balances" is added to balance the transactions, by
       default.  You can customise this account name with --close-acct and --open-acct; if you specify only  one
       of these, it will be used for both.

       With --x/--explicit, the equity posting's amount will be shown.  And if it involves multiple commodities,
       a posting for each commodity will be shown, as with the print command.

       With  --interleaved,  the  equity  postings  are  shown  next  to  the postings they balance, which makes
       troubleshooting easier.

       By  default,  transaction  prices  in  the  journal  are  ignored  when  generating  the  closing/opening
       transactions.   With  --show-costs,  this  cost  information  is  preserved  (balance  -B reports will be
       unchanged after the transition).  Separate postings are generated for each cost in each commodity.   Note
       this  can  generate  very  large  journal  entries,  if  you  have  many  foreign  currency or investment
       transactions.

   close usage
       If you split your journal files by time (eg yearly), you will typically run this command at  the  end  of
       the  year, and save the closing transaction as last entry of the old file, and the opening transaction as
       the first entry of the new file.  This makes the files self  contained,  so  that  correct  balances  are
       reported no matter which of them are loaded.  Ie, if you load just one file, the balances are initialised
       correctly;  or  if  you  load several files, the redundant closing/opening transactions cancel each other
       out.  (They will show up in  print  or  register  reports;  you  can  exclude  them  with  a  query  like
       not:desc:'(opening|closing) balances'.)

       If  you're  running  a  business,  you  might also use this command to "close the books" at the end of an
       accounting period, transferring income statement account balances to retained earnings.  (You may want to
       change the equity account name to something like "equity:retained earnings".)

       By default, the closing transaction is dated  yesterday,  the  balances  are  calculated  as  of  end  of
       yesterday,  and  the opening transaction is dated today.  To close on some other date, use: hledger close
       -e OPENINGDATE.  Eg, to close/open on the 2018/2019 boundary, use -e  2019.   You  can  also  use  -p  or
       date:PERIOD (any starting date is ignored).

       Both  transactions  will  include  balance  assertions  for  the  closed/reopened accounts.  You probably
       shouldn't use status or realness filters (like -C or -R or status:) with this command, or  the  generated
       balance  assertions  will  depend  on  these  flags.   Likewise, if you run this command with --auto, the
       balance assertions will probably always require --auto.

       Examples:

       Carrying asset/liability balances into a new file for 2019:

              $ hledger close -f 2018.journal -e 2019 assets liabilities --open
                  # (copy/paste the output to the start of your 2019 journal file)
              $ hledger close -f 2018.journal -e 2019 assets liabilities --close
                  # (copy/paste the output to the end of your 2018 journal file)

       Now:

              $ hledger bs -f 2019.journal                   # one file - balances are correct
              $ hledger bs -f 2018.journal -f 2019.journal   # two files - balances still correct
              $ hledger bs -f 2018.journal not:desc:closing  # to see year-end balances, must exclude closing txn

       Transactions spanning the closing date can complicate matters, breaking balance assertions:

              2018/12/30 a purchase made in 2018, clearing the following year
                  expenses:food          5
                  assets:bank:checking  -5  ; [2019/1/2]

       Here's one way to resolve that:

              ; in 2018.journal:
              2018/12/30 a purchase made in 2018, clearing the following year
                  expenses:food          5
                  liabilities:pending

              ; in 2019.journal:
              2019/1/2 clearance of last year's pending transactions
                  liabilities:pending    5 = 0
                  assets:checking

   codes
       codes
       List the codes seen in transactions, in the order parsed.

       This command prints the value of each transaction's code field, in the order  transactions  were  parsed.
       The  transaction code is an optional value written in parentheses between the date and description, often
       used to store a cheque number, order number or similar.

       Transactions aren't required to have a code, and missing or empty codes will not  be  shown  by  default.
       With the -E/--empty flag, they will be printed as blank lines.

       You can add a query to select a subset of transactions.

       Examples:

              1/1 (123)
               (a)  1

              1/1 ()
               (a)  1

              1/1
               (a)  1

              1/1 (126)
               (a)  1

              $ hledger codes
              123
              124
              126

              $ hledger codes -E
              123
              124

              126

   commodities
       commodities
       List all commodity/currency symbols used or declared in the journal.

   descriptions
       descriptions
       List the unique descriptions that appear in transactions.

       This command lists the unique descriptions that appear in transactions, in alphabetic order.  You can add
       a query to select a subset of transactions.

       Example:

              $ hledger descriptions
              Store Name
              Gas Station | Petrol
              Person A

   diff
       diff
       Compares  a  particular  account's  transactions  in  two input files.  It shows any transactions to this
       account which are in one file but not in the other.

       More precisely, for each posting affecting this account in either file,  it  looks  for  a  corresponding
       posting  in  the  other file which posts the same amount to the same account (ignoring date, description,
       etc.) Since postings not transactions are compared, this also works when multiple bank transactions  have
       been combined into a single journal entry.

       This is useful eg if you have downloaded an account's transactions from your bank (eg as CSV data).  When
       hledger and your bank disagree about the account balance, you can compare the bank data with your journal
       to find out the cause.

       Examples:

              $ hledger diff -f $LEDGER_FILE -f bank.csv assets:bank:giro
              These transactions are in the first file only:

              2014/01/01 Opening Balances
                  assets:bank:giro              EUR ...
                  ...
                  equity:opening balances       EUR -...

              These transactions are in the second file only:

   files
       files
       List  all  files  included  in  the journal.  With a REGEX argument, only file names matching the regular
       expression (case sensitive) are shown.

   help
       help
       Show any of the hledger manuals.

       The help command displays any of the main hledger manuals, in one  of  several  ways.   Run  it  with  no
       argument to list the manuals, or provide a full or partial manual name to select one.

       hledger  manuals  are  available  in  several  formats.  hledger help will use the first of these display
       methods that it finds: info, man, $PAGER, less, stdout (or when non-interactive, just stdout).   You  can
       force a particular viewer with the --info, --man, --pager, --cat flags.

       Examples:

              $ hledger help
              Please choose a manual by typing "hledger help MANUAL" (a substring is ok).
              Manuals: hledger hledger-ui hledger-web journal csv timeclock timedot

              $ hledger help h --man

              hledger(1)                    hledger User Manuals                    hledger(1)

              NAME
                     hledger - a command-line accounting tool

              SYNOPSIS
                     hledger [-f FILE] COMMAND [OPTIONS] [ARGS]
                     hledger [-f FILE] ADDONCMD -- [OPTIONS] [ARGS]
                     hledger

              DESCRIPTION
                     hledger  is  a  cross-platform  program  for tracking money, time, or any
              ...

   import
       import
       Read  new transactions added to each FILE since last run, and add them to the main journal file.  Or with
       --dry-run, just print the transactions that would be added.  Or with --catchup,  just  mark  all  of  the
       FILEs' transactions as imported, without actually importing any.

       The  input  files  are  specified  as  arguments - no need to write -f before each one.  So eg to add new
       transactions from all CSV files to the main journal, it's just: hledger import *.csv

       New transactions are detected in the same way as print --new: by assuming transactions are  always  added
       to the input files in increasing date order, and by saving .latest.FILE state files.

       The  --dry-run  output  is  in  journal  format,  so  you  can  filter  it,  eg to see only uncategorised
       transactions:

              $ hledger import --dry ... | hledger -f- print unknown --ignore-assertions

   Importing balance assignments
       Entries added by import will have their posting amounts made explicit  (like  hledger  print  -x).   This
       means  that any balance assignments in imported files must be evaluated; but, imported files don't get to
       see the main file's account balances.  As a result, importing entries with balance assignments  (eg  from
       an  institution  that  provides  only  balances and not posting amounts) will probably generate incorrect
       posting amounts.  To avoid this problem, use print instead of import:

              $ hledger print IMPORTFILE [--new] >> $LEDGER_FILE

       (If you think import should leave amounts implicit like print does,  please  test  it  and  send  a  pull
       request.)

   incomestatement
       incomestatement, is
       This  command  displays  an  income  statement, showing revenues and expenses during one or more periods.
       Amounts are shown with normal positive sign, as in conventional financial statements.

       The revenue and expense accounts shown are those accounts declared with the Revenue or Expense  type,  or
       otherwise  all accounts under a top-level revenue or income or expense account (case insensitive, plurals
       allowed).

       Example:

              $ hledger incomestatement
              Income Statement

              Revenues:
                               $-2  income
                               $-1    gifts
                               $-1    salary
              --------------------
                               $-2

              Expenses:
                                $2  expenses
                                $1    food
                                $1    supplies
              --------------------
                                $2

              Total:
              --------------------
                                 0

       With a reporting interval, multiple columns  will  be  shown,  one  for  each  report  period.   Normally
       incomestatement  shows  revenues/expenses  per period, though as with multicolumn balance reports you can
       alter the report mode with --change/--cumulative/--historical.  Instead of  absolute  values  percentages
       can be displayed with -%.

       This  command also supports the output destination and output format options The output formats supported
       are txt, csv, html, and (experimental) json.

   notes
       notes
       List the unique notes that appear in transactions.

       This command lists the unique notes that appear in transactions, in alphabetic  order.   You  can  add  a
       query  to select a subset of transactions.  The note is the part of the transaction description after a |
       character (or if there is no |, the whole description).

       Example:

              $ hledger notes
              Petrol
              Snacks

   payees
       payees
       List the unique payee/payer names that appear in transactions.

       This command lists the unique payee/payer names that appear in transactions, in  alphabetic  order.   You
       can  add  a  query  to  select  a subset of transactions.  The payee/payer is the part of the transaction
       description before a | character (or if there is no |, the whole description).

       Example:

              $ hledger payees
              Store Name
              Gas Station
              Person A

   prices
       prices
       Print market price directives from the journal.  With --costs, also print synthetic market  prices  based
       on  transaction  prices.   With  --inverted-costs, also print inverse prices based on transaction prices.
       Prices (and postings providing prices) can be filtered by a query.  Price amounts  are  always  displayed
       with their full precision.

   print
       print, txns, p
       Show transaction journal entries, sorted by date.

       The  print  command  displays  full  journal  entries (transactions) from the journal file in date order,
       tidily formatted.  With --date2, transactions are sorted by secondary date instead.

       print's output is always a valid hledger journal.
       It preserves all transaction information, but  it  does  not  preserve  directives  or  inter-transaction
       comments

              $ hledger print
              2008/01/01 income
                  assets:bank:checking            $1
                  income:salary                  $-1

              2008/06/01 gift
                  assets:bank:checking            $1
                  income:gifts                   $-1

              2008/06/02 save
                  assets:bank:saving              $1
                  assets:bank:checking           $-1

              2008/06/03 * eat & shop
                  expenses:food                $1
                  expenses:supplies            $1
                  assets:cash                 $-2

              2008/12/31 * pay off
                  liabilities:debts               $1
                  assets:bank:checking           $-1

       Normally,  the  journal  entry's  explicit  or  implicit amount style is preserved.  For example, when an
       amount is omitted in the journal, it will not appear in the output.  Similarly, when a transaction  price
       is implied but not written, it will not appear in the output.  You can use the -x/--explicit flag to make
       all  amounts  and transaction prices explicit, which can be useful for troubleshooting or for making your
       journal more readable and robust against data  entry  errors.   -x  is  also  implied  by  using  any  of
       -B,-V,-X,--value.

       Note,  -x/--explicit  will  cause  postings  with a multi-commodity amount (these can arise when a multi-
       commodity transaction has an implicit amount)  to  be  split  into  multiple  single-commodity  postings,
       keeping the output parseable.

       With -B/--cost, amounts with transaction prices are converted to cost using that price.  This can be used
       for troubleshooting.

       With  -m/--match  and  a  STR  argument,  print  will  show  at  most  one transaction: the one one whose
       description is most similar to STR, and is most recent.  STR should contain at least two characters.   If
       there is no similar-enough match, no transaction will be shown.

       With  --new,  for  each FILE being read, hledger reads (and writes) a special state file (.latest.FILE in
       the same directory), containing the latest transaction date(s) that were seen last time  FILE  was  read.
       When this file is found, only transactions with newer dates (and new transactions on the latest date) are
       printed.   This is useful for ignoring already-seen entries in import data, such as downloaded CSV files.
       Eg:

              $ hledger -f bank1.csv print --new
              (shows transactions added since last print --new on this file)

       This assumes that transactions added to FILE always have same or increasing dates, and that  transactions
       on the same day do not get reordered.  See also the import command.

       This  command also supports the output destination and output format options The output formats supported
       are txt, csv, and (experimental) json and sql.

       Here's an example of print's CSV output:

              $ hledger print -Ocsv
              "txnidx","date","date2","status","code","description","comment","account","amount","commodity","credit","debit","posting-status","posting-comment"
              "1","2008/01/01","","","","income","","assets:bank:checking","1","$","","1","",""
              "1","2008/01/01","","","","income","","income:salary","-1","$","1","","",""
              "2","2008/06/01","","","","gift","","assets:bank:checking","1","$","","1","",""
              "2","2008/06/01","","","","gift","","income:gifts","-1","$","1","","",""
              "3","2008/06/02","","","","save","","assets:bank:saving","1","$","","1","",""
              "3","2008/06/02","","","","save","","assets:bank:checking","-1","$","1","","",""
              "4","2008/06/03","","*","","eat & shop","","expenses:food","1","$","","1","",""
              "4","2008/06/03","","*","","eat & shop","","expenses:supplies","1","$","","1","",""
              "4","2008/06/03","","*","","eat & shop","","assets:cash","-2","$","2","","",""
              "5","2008/12/31","","*","","pay off","","liabilities:debts","1","$","","1","",""
              "5","2008/12/31","","*","","pay off","","assets:bank:checking","-1","$","1","","",""

       • There is one CSV record per posting, with the parent transaction's fields repeated.

       • The "txnidx" (transaction index) field shows which postings belong  to  the  same  transaction.   (This
         number  might  change  if  transactions  are  reordered within the file, files are parsed/included in a
         different order, etc.)

       • The amount is separated into "commodity" (the symbol) and "amount" (numeric quantity) fields.

       • The numeric amount is repeated in either the "credit" or "debit" column, for convenience.  (Those names
         are not accurate in the accounting sense; it just puts  negative  amounts  under  credit  and  zero  or
         greater amounts under debit.)

   print-unique
       print-unique
       Print transactions which do not reuse an already-seen description.

       Example:

              $ cat unique.journal
              1/1 test
               (acct:one)  1
              2/2 test
               (acct:two)  2
              $ LEDGER_FILE=unique.journal hledger print-unique
              (-f option not supported)
              2015/01/01 test
                  (acct:one)             1

   register
       register, reg, r
       Show postings and their running total.

       The  register  command  displays matched postings, across all accounts, in date order, with their running
       total or running historical balance.  (See also the aregister command, which shows  matched  transactions
       in a specific account.)

       register  normally  shows  line  per  posting, but note that multi-commodity amounts will occupy multiple
       lines (one line per commodity).

       It is typically used with a query selecting a particular account, to see that account's activity:

              $ hledger register checking
              2008/01/01 income               assets:bank:checking            $1           $1
              2008/06/01 gift                 assets:bank:checking            $1           $2
              2008/06/02 save                 assets:bank:checking           $-1           $1
              2008/12/31 pay off              assets:bank:checking           $-1            0

       With --date2, it shows and sorts by secondary date instead.

       The --historical/-H flag adds the balance from any undisplayed prior postings to the running total.  This
       is useful when you want to see only recent activity, with a historically accurate running balance:

              $ hledger register checking -b 2008/6 --historical
              2008/06/01 gift                 assets:bank:checking            $1           $2
              2008/06/02 save                 assets:bank:checking           $-1           $1
              2008/12/31 pay off              assets:bank:checking           $-1            0

       The --depth option limits the amount of sub-account detail displayed.

       The --average/-A flag shows the running average posting amount instead of  the  running  total  (so,  the
       final  number  displayed  is  the  average  for the whole report period).  This flag implies --empty (see
       below).  It is affected by --historical.  It works best when showing just one account and one commodity.

       The --related/-r flag shows the other postings in the transactions of the postings which  would  normally
       be shown.

       The  --invert  flag  negates all amounts.  For example, it can be used on an income account where amounts
       are normally displayed as negative numbers.  It's also useful to show postings on  the  checking  account
       together with the related account:

              $ hledger register --related --invert assets:checking

       With a reporting interval, register shows summary postings, one per interval, aggregating the postings to
       each account:

              $ hledger register --monthly income
              2008/01                 income:salary                          $-1          $-1
              2008/06                 income:gifts                           $-1          $-2

       Periods  with  no  activity,  and  summary postings with a zero amount, are not shown by default; use the
       --empty/-E flag to see them:

              $ hledger register --monthly income -E
              2008/01                 income:salary                          $-1          $-1
              2008/02                                                          0          $-1
              2008/03                                                          0          $-1
              2008/04                                                          0          $-1
              2008/05                                                          0          $-1
              2008/06                 income:gifts                           $-1          $-2
              2008/07                                                          0          $-2
              2008/08                                                          0          $-2
              2008/09                                                          0          $-2
              2008/10                                                          0          $-2
              2008/11                                                          0          $-2
              2008/12                                                          0          $-2

       Often, you'll want to see just one line per interval.   The  --depth  option  helps  with  this,  causing
       subaccounts to be aggregated:

              $ hledger register --monthly assets --depth 1h
              2008/01                 assets                                  $1           $1
              2008/06                 assets                                 $-1            0
              2008/12                 assets                                 $-1          $-1

       Note  when  using  report  intervals,  if  you  specify start/end dates these will be adjusted outward if
       necessary to contain a whole number of intervals.  This ensures that the first  and  last  intervals  are
       full length and comparable to the others in the report.

   Custom register output
       register  uses  the  full terminal width by default, except on windows.  You can override this by setting
       the COLUMNS environment variable (not a bash shell variable) or by using the --width/-w option.

       The description and account columns normally share the space equally (about half of (width -  40)  each).
       You can adjust this by adding a description width as part of --width's argument, comma-separated: --width
       W,D .  Here's a diagram (won't display correctly in --help):

              <--------------------------------- width (W) ---------------------------------->
              date (10)  description (D)       account (W-41-D)     amount (12)   balance (12)
              DDDDDDDDDD dddddddddddddddddddd  aaaaaaaaaaaaaaaaaaa  AAAAAAAAAAAA  AAAAAAAAAAAA

       and some examples:

              $ hledger reg                     # use terminal width (or 80 on windows)
              $ hledger reg -w 100              # use width 100
              $ COLUMNS=100 hledger reg         # set with one-time environment variable
              $ export COLUMNS=100; hledger reg # set till session end (or window resize)
              $ hledger reg -w 100,40           # set overall width 100, description width 40
              $ hledger reg -w $COLUMNS,40      # use terminal width, & description width 40

       This  command also supports the output destination and output format options The output formats supported
       are txt, csv, and (experimental) json.

   register-match
       register-match
       Print the one posting whose transaction description is closest to DESC, in  the  style  of  the  register
       command.   If there are multiple equally good matches, it shows the most recent.  Query options (options,
       not arguments) can be used to restrict the  search  space.   Helps  ledger-autosync  detect  already-seen
       transactions when importing.

   rewrite
       rewrite
       Print  all  transactions,  rewriting  the  postings  of  matched  transactions.  For now the only rewrite
       available is adding new postings, like print --auto.

       This is a start at a generic rewriter of transaction entries.  It reads the default  journal  and  prints
       the transactions, like print, but adds one or more specified postings to any transactions matching QUERY.
       The posting amounts can be fixed, or a multiplier of the existing transaction's first posting amount.

       Examples:

              $ hledger-rewrite.hs ^income --add-posting '(liabilities:tax)  *.33  ; income tax' --add-posting '(reserve:gifts)  $100'
              $ hledger-rewrite.hs expenses:gifts --add-posting '(reserve:gifts)  *-1"'
              $ hledger-rewrite.hs -f rewrites.hledger

       rewrites.hledger may consist of entries like:

              = ^income amt:<0 date:2017
                (liabilities:tax)  *0.33  ; tax on income
                (reserve:grocery)  *0.25  ; reserve 25% for grocery
                (reserve:)  *0.25  ; reserve 25% for grocery

       Note  the  single  quotes  to  protect  the dollar sign from bash, and the two spaces between account and
       amount.

       More:

              $ hledger rewrite -- [QUERY]        --add-posting "ACCT  AMTEXPR" ...
              $ hledger rewrite -- ^income        --add-posting '(liabilities:tax)  *.33'
              $ hledger rewrite -- expenses:gifts --add-posting '(budget:gifts)  *-1"'
              $ hledger rewrite -- ^income        --add-posting '(budget:foreign currency)  *0.25 JPY; diversify'

       Argument for --add-posting option is a  usual  posting  of  transaction  with  an  exception  for  amount
       specification.   More  precisely,  you  can use '*' (star symbol) before the amount to indicate that that
       this is a factor for an amount of original matched posting.  If the amount includes a commodity name, the
       new posting amount will be in the new commodity; otherwise, it will be in the  matched  posting  amount's
       commodity.

   Re-write rules in a file
       During the run this tool will execute so called "Automated Transactions" found in any journal it process.
       I.e instead of specifying this operations in command line you can put them in a journal file.

              $ rewrite-rules.journal

       Make contents look like this:

              = ^income
                  (liabilities:tax)  *.33

              = expenses:gifts
                  budget:gifts  *-1
                  assets:budget  *1

       Note  that  '='  (equality  symbol)  that  is used instead of date in transactions you usually write.  It
       indicates the query by which you want to match the posting to add new ones.

              $ hledger rewrite -- -f input.journal -f rewrite-rules.journal > rewritten-tidy-output.journal

       This is something similar to the commands pipeline:

              $ hledger rewrite -- -f input.journal '^income' --add-posting '(liabilities:tax)  *.33' \
                | hledger rewrite -- -f - expenses:gifts      --add-posting 'budget:gifts  *-1'       \
                                                              --add-posting 'assets:budget  *1'       \
                > rewritten-tidy-output.journal

       It is important to understand that relative order of such entries in journal is important.  You  can  re-
       use result of previously added postings.

   Diff output format
       To  use  this  tool  for  batch  modification of your journal files you may find useful output in form of
       unified diff.

              $ hledger rewrite -- --diff -f examples/sample.journal '^income' --add-posting '(liabilities:tax)  *.33'

       Output might look like:

              --- /tmp/examples/sample.journal
              +++ /tmp/examples/sample.journal
              @@ -18,3 +18,4 @@
               2008/01/01 income
              -    assets:bank:checking  $1
              +    assets:bank:checking            $1
                   income:salary
              +    (liabilities:tax)                0
              @@ -22,3 +23,4 @@
               2008/06/01 gift
              -    assets:bank:checking  $1
              +    assets:bank:checking            $1
                   income:gifts
              +    (liabilities:tax)                0

       If you'll pass this through patch tool you'll get transactions containing the posting that  matches  your
       query  be  updated.   Note that multiple files might be update according to list of input files specified
       via --file options and include directives inside of these files.

       Be careful.  Whole transaction being re-formatted in a style of output from hledger print.

       See also:

       https://github.com/simonmichael/hledger/issues/99

   rewrite vs. print --auto
       This command predates print --auto, and currently does much the same thing, but with these differences:

       • with multiple files, rewrite lets rules in any file affect all other files.  print --auto uses standard
         directive scoping; rules affect only child files.

       • rewrite's query limits which transactions can be rewritten; all  are  printed.   print  --auto's  query
         limits which transactions are printed.

       • rewrite  applies  rules  specified  on  command  line  or  in  the journal.  print --auto applies rules
         specified in the journal.

   roi
       roi
       Shows the time-weighted (TWR) and money-weighted (IRR) rate of return on your investments.

       This command assumes that you have account(s) that hold nothing but your  investments  and  whenever  you
       record  current  appraisal/valuation  of  these  investments  you  offset unrealized profit and loss into
       account(s) that, again, hold nothing but unrealized profit and loss.

       Any transactions affecting balance of investment account(s) and not originating  from  unrealized  profit
       and loss account(s) are assumed to be your investments or withdrawals.

       At a minimum, you need to supply a query (which could be just an account name) to select your investments
       with --inv, and another query to identify your profit and loss transactions with --pnl.

       It  will compute and display the internalized rate of return (IRR) and time-weighted rate of return (TWR)
       for your investments for the time period requested.  Both rates of return are annualized before  display,
       regardless of the length of reporting interval.

   stats
       stats
       Show some journal statistics.

       The  stats  command  displays summary information for the whole journal, or a matched part of it.  With a
       reporting interval, it shows a report for each report period.

       Example:

              $ hledger stats
              Main journal file        : /src/hledger/examples/sample.journal
              Included journal files   :
              Transactions span        : 2008-01-01 to 2009-01-01 (366 days)
              Last transaction         : 2008-12-31 (2333 days ago)
              Transactions             : 5 (0.0 per day)
              Transactions last 30 days: 0 (0.0 per day)
              Transactions last 7 days : 0 (0.0 per day)
              Payees/descriptions      : 5
              Accounts                 : 8 (depth 3)
              Commodities              : 1 ($)
              Market prices            : 12 ($)

       This command also supports output destination and output format selection.

   tags
       tags
       List the unique tag names used in the journal.  With a TAGREGEX argument, only  tag  names  matching  the
       regular  expression  (case  insensitive) are shown.  With QUERY arguments, only transactions matching the
       query are considered.

       With the --values flag, the tags' unique values are listed instead.

       With --parsed flag, all tags or values are shown in the order  they  are  parsed  from  the  input  data,
       including duplicates.

       With -E/--empty, any blank/empty values will also be shown, otherwise they are omitted.

   test
       test
       Run built-in unit tests.

       This command runs the unit tests built in to hledger and hledger-lib, printing the results on stdout.  If
       any test fails, the exit code will be non-zero.

       This  is mainly used by hledger developers, but you can also use it to sanity-check the installed hledger
       executable on your platform.  All tests are expected to pass - if you ever see a failure,  please  report
       as a bug!

       This  command also accepts tasty test runner options, written after a -- (double hyphen).  Eg to run only
       the tests in Hledger.Data.Amount, with ANSI colour codes disabled:

              $ hledger test -- -pData.Amount --color=never

       For help on these, see  https://github.com/feuerbach/tasty#options  (--  --help  currently  doesn't  show
       them).

   Add-on commands
       hledger  also  searches for external add-on commands, and will include these in the commands list.  These
       are programs or scripts in your PATH whose name starts with hledger- and  ends  with  a  recognised  file
       extension (currently: no extension, bat,com,exe, hs,lhs,pl,py,rb,rkt,sh).

       Add-ons  can  be  invoked like any hledger command, but there are a few things to be aware of.  Eg if the
       hledger-web add-on is installed,

       • hledger -h web shows hledger's help, while hledger web -h shows hledger-web's help.

       • Flags specific to the add-on must have a preceding -- to  hide  them  from  hledger.   So  hledger  web
         --serve --port 9000 will be rejected; you must use hledger web -- --serve --port 9000.

       • You can always run add-ons directly if preferred: hledger-web --serve --port 9000.

       Add-ons  are  a  relatively  easy  way  to  add local features or experiment with new ideas.  They can be
       written in any language, but haskell scripts have a big advantage: they can use  the  same  hledger  (and
       haskell)  library  functions  that  built-in  commands  do,  for  command-line  options, journal parsing,
       reporting, etc.

       Two important add-ons are the hledger-ui and hledger-web  user  interfaces.   These  are  maintained  and
       released along with hledger:

   ui
       hledger-ui provides an efficient terminal interface.

   web
       hledger-web provides a simple web interface.

       Third party add-ons, maintained separately from hledger, include:

   iadd
       hledger-iadd is a more interactive, terminal UI replacement for the add command.

   interest
       hledger-interest generates interest transactions for an account according to various schemes.

       A  few  more  experimental  or old add-ons can be found in hledger's bin/ directory.  These are typically
       prototypes and not guaranteed to work.

ENVIRONMENT

       LEDGER_FILE The journal file path when not specified with -f.  Default: ~/.hledger.journal  (on  windows,
       perhaps C:/Users/USER/.hledger.journal).

       A  typical  value  is ~/DIR/YYYY.journal, where DIR is a version-controlled finance directory and YYYY is
       the current year.  Or ~/DIR/current.journal, where current.journal is a symbolic link to YYYY.journal.

       On Mac computers, you can set this and other environment variables in  a  more  thorough  way  that  also
       affects  applications  started  from  the  GUI  (say, an Emacs dock icon).  Eg on MacOS Catalina I have a
       ~/.MacOSX/environment.plist file containing

              {
                "LEDGER_FILE" : "~/finance/current.journal"
              }

       To see the effect you may need to killall Dock, or reboot.

       COLUMNS The screen width used by the register command.  Default: the full terminal width.

       NO_COLOR If this variable exists with any value, hledger will  not  use  ANSI  color  codes  in  terminal
       output.  This overrides the --color/--colour option.

FILES

       Reads  data  from  one or more files in hledger journal, timeclock, timedot, or CSV format specified with
       -f, or $LEDGER_FILE, or $HOME/.hledger.journal (on windows, perhaps C:/Users/USER/.hledger.journal).

LIMITATIONS

       The need to precede addon command options with -- when invoked from hledger is awkward.

       When input data contains non-ascii characters, a suitable system locale must be configured (or there will
       be an unhelpful error).  Eg on POSIX, set LANG to something other than C.

       In a Microsoft Windows CMD window, non-ascii characters and colours are not supported.

       On Windows, non-ascii characters may not display correctly  when  running  a  hledger  built  in  CMD  in
       MSYS/CYGWIN, or vice-versa.

       In a Cygwin/MSYS/Mintty window, the tab key is not supported in hledger add.

       Not all of Ledger's journal file syntax is supported.  See file format differences.

       On large data files, hledger is slower and uses more memory than Ledger.

TROUBLESHOOTING

       Here  are  some issues you might encounter when you run hledger (and remember you can also seek help from
       the IRC channel, mail list or bug tracker):

       Successfully installed, but "No command 'hledger' found"
       stack and cabal install binaries into a special directory, which should be added to your PATH environment
       variable.  Eg on unix-like systems, that is ~/.local/bin and ~/.cabal/bin respectively.

       I set a custom LEDGER_FILE, but hledger is still using the default file
       LEDGER_FILE should be a real environment variable, not just a shell variable.  The  command  env  |  grep
       LEDGER_FILE should show it.  You may need to use export.  Here's an explanation.

       Getting  errors  like  "Illegal  byte sequence" or "Invalid or incomplete multibyte or wide character" or
       "commitAndReleaseBuffer: invalid argument (invalid character)"
       Programs compiled with GHC (hledger, haskell build  tools,  etc.)  need  to  have  a  UTF-8-aware  locale
       configured  in  the  environment, otherwise they will fail with these kinds of errors when they encounter
       non-ascii characters.

       To fix it, set the LANG environment variable to some locale which supports UTF-8.  The locale you  choose
       must be installed on your system.

       Here's an example of setting LANG temporarily, on Ubuntu GNU/Linux:

              $ file my.journal
              my.journal: UTF-8 Unicode text         # the file is UTF8-encoded
              $ echo $LANG
              C                                      # LANG is set to the default locale, which does not support UTF8
              $ locale -a                            # which locales are installed ?
              C
              en_US.utf8                             # here's a UTF8-aware one we can use
              POSIX
              $ LANG=en_US.utf8 hledger -f my.journal print   # ensure it is used for this command

       If available, C.UTF-8 will also work.  If your preferred locale isn't listed by locale -a, you might need
       to install it.  Eg on Ubuntu/Debian:

              $ apt-get install language-pack-fr
              $ locale -a
              C
              en_US.utf8
              fr_BE.utf8
              fr_CA.utf8
              fr_CH.utf8
              fr_FR.utf8
              fr_LU.utf8
              POSIX
              $ LANG=fr_FR.utf8 hledger -f my.journal print

       Here's how you could set it permanently, if you use a bash shell:

              $ echo "export LANG=en_US.utf8" >>~/.bash_profile
              $ bash --login

       Exact  spelling  and  capitalisation  may  be important.  Note the difference on MacOS (UTF-8, not utf8).
       Some platforms (eg ubuntu) allow variant spellings, but others (eg macos) require it to be exact:

              $ locale -a | grep -iE en_us.*utf
              en_US.UTF-8
              $ LANG=en_US.UTF-8 hledger -f my.journal print

REPORTING BUGS

       Report bugs at http://bugs.hledger.org (or on the #hledger IRC channel or hledger mail list)

AUTHORS

       Simon Michael <simon@joyful.com> and contributors

COPYRIGHT

       Copyright (C) 2007-2019 Simon Michael.
       Released under GNU GPL v3 or later.

SEE ALSO

       hledger(1),   hledger-ui(1),   hledger-web(1),   hledger-api(1),   hledger_csv(5),    hledger_journal(5),
       hledger_timeclock(5), hledger_timedot(5), ledger(1)

       http://hledger.org

hledger 1.18.99                                  September 2020                                       hledger(1)