如何删除文件中的每一行的前导空白?

我有一个这样的文件:

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

我希望它看起来像这样(删除缩进):

 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/^[ \t]*//" -i youfile 

警告:这将覆盖原始文件。

对于这个特定的问题,像这样的东西可以工作:

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

它说在一行的开始replace所有的空格什么也没有。 如果您还想删除选项卡,请将其更改为:

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

/之前的“领先”是指“替代”。 /是模式的分隔符。 前两个数据之间的数据是要匹配的模式,第二个和第三个数据之间的数据是要replace的数据。 在这种情况下,你没有任何东西取代它。 最后一个斜杠之后的“g”表示“全局”,即:在整个文件上而不是仅在第一个find的匹配项上执行。

最后,您可以使用-i选项来代替< input.txt > output.txt ,这意味着可以在“就地”编辑文件。 意思是,你不需要创build第二个文件来包含你的结果。 如果您使用此选项,则会丢失原始文件。

你可以使用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++) 

shell的while / read循环

 while read -r line do echo $line done <"file" 

这个Perl代码编辑你的原始文件:

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

下一个在编辑原始文件之前进行备份:

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

注意Perl从sed(和awk)

干得好:

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

要么:

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

sed -e 's / ^ [\ t] * //' name_of_file_from_which_you_want_to_remove_space>'name _file_where_you_want_to_store_output'

例如: – sed -e's / ^ [\ t] * //'file1.txt> output.txt

注意:

s /:在每个寻址的行上replace命令〜replace模式(^ [\ t] *)

^ [\ t] *:search模式(^ – 行首; [\ t] *匹配一个或多个包括制表符的空格)

//:replace(删除)所有匹配的模式

FWIW,如果你正在编辑这个文件,你可能会突出显示所有行,并使用你的un-tabbutton。

  • 在vim中,使用shift-v突出显示行,然后按<<
  • 如果您在Mac上,那么您可以使用Atom,Sublime等,然后用鼠标突出显示,然后按shift-tab

不知道是否有一些要求必须从命令行完成。 如果是,那么:竖起大拇指:接受答案! =)