How to remove leading whitespace from each line in a file

前端 未结 7 667
余生分开走
余生分开走 2020-12-12 19:29

I have a file that looks something like this:

for (i = 0; i < 100; i++)
    for (i = 0; i < 100; i++)
  for (i = 0; i < 100; i++)
       for (i = 0;         


        
相关标签:
7条回答
  • 2020-12-12 20:03

    Here you go:

    user@host:~$ sed 's/^[\t ]*//g' < file-in.txt
    

    Or:

    user@host:~$ sed 's/^[\t ]*//g' < file-in.txt > file-out.txt
    
    0 讨论(0)
  • 2020-12-12 20:05

    This Perl code edits your original file:

    perl -i -ne 's/^\s+//;print' file
    

    The next one makes a backup copy before editing the original file:

    perl -i.bak -ne 's/^\s+//;print' file
    

    Notice that Perl borrows heavily from sed (and AWK).

    0 讨论(0)
  • 2020-12-12 20:07

    For this specific problem, something like this would work:

    $ sed 's/^ *//g' < input.txt > output.txt
    

    It says to replace all spaces at the start of a line with nothing. If you also want to remove tabs, change it to this:

    $ sed 's/^[ \t]+//g' < input.txt > output.txt
    

    The leading "s" before the / means "substitute". The /'s are the delimiters for the patterns. The data between the first two /'s are the pattern to match, and the data between the second and third / is the data to replace it with. In this case you're replacing it with nothing. The "g" after the final slash means to do it "globally", ie: over the entire file rather than on only the first match it finds.

    Finally, instead of < input.txt > output.txt you can use the -i option which means to edit the file "in place". Meaning, you don't need to create a second file to contain your result. If you use this option you will lose your original file.

    0 讨论(0)
  • 2020-12-12 20:15

    You can use AWK:

    $ awk '{$1=$1}1' file
    for (i = 0; i < 100; i++)
    for (i = 0; i < 100; i++)
    for (i = 0; i < 100; i++)
    for (i = 0; i < 100; i++)
    for (i = 0; i < 100; i++)
    for (i = 0; i < 100; i++)
    for (i = 0; i < 100; i++)
    

    sed

    $ sed 's|^[[:blank:]]*||g' file
    for (i = 0; i < 100; i++)
    for (i = 0; i < 100; i++)
    for (i = 0; i < 100; i++)
    for (i = 0; i < 100; i++)
    for (i = 0; i < 100; i++)
    for (i = 0; i < 100; i++)
    for (i = 0; i < 100; i++)
    

    The shell's while/read loop

    while read -r line
    do
        echo $line
    done <"file"
    
    0 讨论(0)
  • 2020-12-12 20:16
    sed "s/^[ \t]*//" -i youfile
    

    Warning: this will overwrite the original file.

    0 讨论(0)
  • 2020-12-12 20:16

    For what it's worth, if you are editing this file, you can probably highlight all the lines and use your un-tab button.

    • In Vim, use Shift + V to highlight the lines, then press <<
    • If you're on a Mac, then you can use Atom, Sublime Text, etc., then highlight with your mouse and then press Shift + Tab

    I am not sure if there is some requirement that this must be done from the command line. If so, then :thumbs-up: to the accepted answer! =)

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