如何删除文件中的每一行的前导空白?
我有一个这样的文件:
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
不知道是否有一些要求必须从命令行完成。 如果是,那么:竖起大拇指:接受答案! =)