修剪文本文件的开头

修剪文本文件的开头

我有一个文本文件,其开头包含意外空格,我想修剪开头部分并保存。我该怎么做?

我尝试了一个在互联网上找到的非常简单的例子,但它却删除了文件:

cat /etc/nginx/sites-enabled/default| sed -e 's/^[ \t]*//' > /etc/nginx/sites-enabled/default

答案1

这:

cat /etc/nginx/sites-enabled/default| sed -e 's/^[ \t]*//' > /etc/nginx/sites-enabled/default

截断文件,因为>首先解析重定向;即,文件在运行之前被截断(并cat读取一个空文件)。sedcat

该命令还会删除前导空格和制表

如果这就是您想要的,只需使用就地选项sed(并删除无用的cat):

sed -ie 's/^[ \t]*//' /etc/nginx/sites-enabled/default

如果只想删除前导空格,请使用此命令:

sed -ie 's/^ *//' /etc/nginx/sites-enabled/default

而且看起来您只想处理第一行。

如果是这种情况,请在命令1前面添加一个s;即:

sed -ie '1s/^[ \t]*//' /etc/nginx/sites-enabled/default

删除第一行的前导空格和制表符,并

sed -ie '1s/^ *//' /etc/nginx/sites-enabled/default

仅删除第一行的前导空格。

答案2

改用这个:

cat 1.txt | sed 's/^ *//;s/ *$//' | sed '/^$/d' > 2.txt

解释

  1. cat 1.txt- 将文件内容加载为输入
  2. sed 's/^ *//;s/ *$//'- 删除文件两侧的空格。开头或结尾。
  3. sed '/^$/d'- 删除空行(如果上述命令留下空行)
  4. > 2.txt- 将结果保存到新文件中。

如果您不想删除空行,请跳过第三步。在这种情况下,您的命令将变为:

cat 1.txt | sed 's/^ *//;s/ *$//' > 2.txt

例子

输入文本(如图,点表示空格):

在此处输入图片描述

输出文本(作为图像,没有删除点和空行):

在此处输入图片描述

编辑

如果重定向到自身,上述解释将清空文件,如下所示:

cat 1.txt | sed 's/^ *//;s/ *$//' | sed '/^$/d' > 1.txt

为了处理这个问题并确保内容被重写入文件,我们只需要像下面的命令一样回显输出:

echo | cat 1.txt | sed 's/^ *//;s/ *$//' | sed '/^$/d' > 1.txt

答案3

你也可以使用 Python(Python 2 或 Python 3)来完成这项工作:

python -c 'import sys; print("".join((str(line).lstrip(" ") for line in sys.stdin)))' <INPUTFILE >OUTPUTFILE

此命令的作用:

  • python -c '...'python3 -c '...'
    启动 Python(2 或 3)解释器并让它运行引号中的命令。
  • import sys; print("".join((str(line).lstrip(" ") for line in sys.stdin)))
    这是一个压缩为一行的小型 Python 脚本,它从 STDIN(标准输入流)读取所有内容,并在删除每行开头的所有空白字符(包括空格、制表符等)后将其打印回 STDOUT(标准输出流)。它会继续读取,直到流结束,这意味着,如果 STDIN 连接到键盘,则直到您手动输入Ctrl+,D或者如果 STDIN 连接到文件或管道,则直到所有数据都已通过。
  • <INPUTFILE
    这会将文件INPUTFILE(替换为适当的文件名)与命令的 STDIN 连接起来。如果省略此项,命令将改为从键盘输入读取。
  • >OUTPUTFILE
    这会将文件OUTPUTFILE(替换为适当的文件名)与命令的 STDOUT 连接起来。如果省略此操作,命令将改为将其输出打印到终端。

请注意,在这种情况下INPUTFILEOUTPUTFILE可能不是相同的文件,因为使用的 Bash 输出重定向首先被解析并在脚本从文件读取之前覆盖该文件。

答案4

你可以在 Ex 模式下使用 Vim:

ex -sc '%s/^[ \t]*//|x' /etc/nginx/sites-enabled/default
  1. %选择所有行

  2. s代替

  3. x保存并关闭

相关内容