Unix Shell Programming: Add a blank line when printing

后端 未结 5 1437
盖世英雄少女心
盖世英雄少女心 2021-01-28 13:17

I am trying to list all the files in the directory but how would you separate each of the files by a blank line? basically each file displayed by separated by a blank line? I am

相关标签:
5条回答
  • 2021-01-28 14:14

    Your loops are close. However, using a traditional bash for loop with ls is dangerous - what happens if your filenames contain spaces? An easy solution with awk:

    ls | awk '{ print $0 "\n" }'
    
    0 讨论(0)
  • 2021-01-28 14:14

    Not sure how portable the options -d and -t are, but pr is ubiquitous:

    $ ls | pr -dt
    

    Note that any file names with an embedded carriage return will have an extra carriage return added in the output. (I believe that problem occurs with all of the solutions presented so far.)

    0 讨论(0)
  • 2021-01-28 14:17

    For reference : http://www.cyberciti.biz/faq/bash-loop-over-file/

    for f in /tmp/play/*
    do
      echo $f
      echo
    done
    

    Edited as per comments making it simpler.

    0 讨论(0)
  • 2021-01-28 14:21

    Here's one:

    find -printf '%p\n\n'
    

    A slightly worse (but more portable) one:

    ls | sed 's|$|\n|'
    

    A more convoluted one:

    ls | while read f; do
        echo "$f"
        echo
    done
    

    And here is what you should not ever do:

    for f in `ls`; do
        echo "$f"
        echo
    done
    

    EDIT:

    And, as mentioned by Nija, the simple shell-only one:

    for f in *; do
        echo "$f"
        echo
    done
    

    This one has the disadvantage that on many shells * by default expands to itself, rather than an empty string when no files exist.

    0 讨论(0)
  • 2021-01-28 14:22

    sed one-liner (or one-char-er):

    ls | sed G
    

    Done.

    0 讨论(0)
提交回复
热议问题