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

我有一个类似这样的文件:

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

152584 次浏览
sed "s/^[ \t]*//" -i youfile

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

对于这个特定的问题,这样的方法可以奏效:

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

它说用空格代替一行开头的所有空格。如果您还想删除选项卡,请将其更改为:

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

在/之前的开头字母“ s”表示“替代品”。“/”是模式的分隔符。前两个/之间的数据是要匹配的模式,第二个/和第三个/之间的数据是要替换它的数据。在这种情况下,你什么都不用替换。最后一个斜杠后面的“ g”表示“全局”执行,即: 覆盖整个文件,而不是仅覆盖它找到的第一个匹配项。

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

给你:

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

或者:

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

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

用途:

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/: 在每一行上替换命令 ~ 模式(^[ \t]*)

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

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

无论如何,如果您是 剪辑这个文件,您可能会突出显示所有行并使用取消选项卡按钮。

  • 在 Vim 中,使用 Shift + V突出显示行,然后按 <<
  • 如果你在 Mac 上,那么你可以使用 亚当崇高的文字等,然后用鼠标突出显示,然后按 Shift + Tab

我不确定是否有一些必须从命令行完成的要求。如果是这样的话,那么: 竖起大拇指: 得到公认的答案!=)

您可以通过以下任何命令删除前导空白:

 - sed -i "s/\s*//" filename
- sed -i "s/[[:space:]]*//"  filename
- sed -i "s/^\s*//"   filename
- sed -i "s/[ \t]*//"  filename

如果要删除空行,可以尝试以下任何一个命令:

 - sed "/^$/d"  filename

在这种情况下,如果您想删除任何前导空白、制表符或空行,您可以使用以下命令:

sed  -i -e "/^$/d"   -i -e "s/^\s*//"  filename