从行首删除所有空格

5
      1 147.31.124.135
      1 147.31.9.135
      1 147.32.123.135
      1 147.32.123.136
      1 147.32.124.135
      1 77.236.192.69
      1 86.49.86.108
      1 86.49.86.109

你好。我有一个文件,每一行开头都有很多空格,我想用awk或sed删除这些空格并打印出所有字段。

结果:

1 147.31.124.135
1 147.32.123.135
1 147.32.123.136
1 147.32.124.135
1 77.236.192.69
1 86.49.86.108
1 86.49.86.109

1
你的结果中缺少第二行,是这样吗? - Claes Wikner
6个回答

17
你可以使用这个 sed 命令来删除前导空格(空格或制表符)。
sed 's/^[ \t]*//' file 

使用sed -i命令直接修改文件。


1
对我有用。只是想补充一下,在 macOS 上运行需要使用这个 sed -i'.bak' 's/^[ \t]*//' file。 - Raymond

7

您甚至可以使用POSIX字符类[:space:],它将处理所有空格(\t\r\n\v等):

sed 's/^[[:space:]]*//g' file

1
这难道也不会删除空行吗? - paddy
2
不需要。使用“nothing”即可解决。仅删除空行:sed '/^$/d' file - P.P

5
sed 命令
   sed 's/^ *//'

应该可以工作。

解释:^表示行的开头,*表示零个或多个空格。这些都被替换为空。


1
使用awk命令。
bash-3.2$ cat input
      1 147.31.124.135
      1 147.31.9.135
      1 147.32.123.135
      1 147.32.123.136
      1 147.32.124.135
      1 77.236.192.69
      1 86.49.86.108
      1 86.49.86.109
bash-3.2$ awk 'sub(/^ */, "")' input
1 147.31.124.135
1 147.31.9.135
1 147.32.123.135
1 147.32.123.136
1 147.32.124.135
1 77.236.192.69
1 86.49.86.108
1 86.49.86.109

1

以下命令可用于从输入文件的每一行中移除所有前导空格:

sed 's/^ *//' < inputfile > outputfile

此命令使用 sed 在输入文件的每一行上执行搜索和替换操作。搜索模式 ^* 匹配每行开头的零个或多个空格(由 * 指示)。替换模式为空字符串 '',删除匹配的空格。结果被写入输出文件,如果没有指定输出文件,则被写入终端。

1
即使署名,AI回答也是不允许的 - undefined

0

你甚至可以使用 POSIX 字符类 [:space:] 来处理所有的空白字符(\t\r\n\v 等):

sed 's/^[[:space:]]*//g' file

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接