如何从文件中的每一行中删除前导空格

时间:2010-02-22 11:42:47

标签: unix sed awk grep

我有一个看起来像这样的文件:

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

7 个答案:

答案 0 :(得分:99)

sed "s/^[ \t]*//" -i youfile

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

答案 1 :(得分:24)

对于这个特定的问题,这样的事情会起作用:

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

它表示用一条线替换所有空格。如果您还想删除标签,请将其更改为:

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

/之前的前导“s”表示“替代”。 /是模式的分隔符。前两个之间的数据是要匹配的模式,第二个和第三个之间的数据是要替换它的数据。在这种情况下,你将一无所获。最后一次斜杠之后的“g”表示“全局”,即:在整个文件上而不是仅在它找到的第一个匹配上。

最后,您可以使用< input.txt > output.txt选项代替-i,这意味着“就地”编辑文件。这意味着,您无需创建第二个文件来包含结果。如果使用此选项,您将丢失原始文件。

答案 2 :(得分:11)

您可以使用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"

答案 3 :(得分:5)

此Perl代码编辑原始文件:

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

下一个在编辑原始文件之前制作备份副本:

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

请注意,Perl从sed(和awk)

中大量借用

答案 4 :(得分:0)

你走了:

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

或者:

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

答案 5 :(得分:0)

sed -e 's / ^ [\ t] * //' name_of_file_from_which_you_want_to_remove_space&gt;'name _file_where_you_want_to_store_output'

例如: - sed -e's / ^ [\ t] * //'file1.txt&gt; output.txt的

注意:

s /:替换命令〜替换每个地址行上的模式(^ [\ t] *)

^ [\ t] *:搜索模式(^ - 行的开头; [\ t] *匹配一个或多个空格,包括制表符)

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

答案 6 :(得分:0)

FWIW,如果您正在编辑此文件,您可以突出显示所有行并使用取消选项卡按钮。

  • 在vim中,使用shift-v突出显示这些行,然后按&lt;&lt;
  • 如果您使用的是mac,那么您可以使用Atom,Sublime等,然后用鼠标突出显示,然后按shift-tab

不确定是否有必须从命令行执行此操作。如果是这样,那么:竖起大拇指:接受答案! =)