如何使用单个命令从文件中提取(读取和删除)一行?

时间:2018-03-13 16:03:57

标签: bash sed

我想从文件中提取第一行,读入变量并在之后使用单个命令删除。我知道sed可以读取第一行如下:

sed '1q' file.txt

或删除它如下:

sed '1q;d' file.txt

但我可以用一个命令以某种方式做到这两点吗? 这样做的原因是多个进程将读取文件的第一行,并且我希望最小化它们获得相同行的机会。

1 个答案:

答案 0 :(得分:1)

这是不可能的。

除非你阅读了联机帮助页,并且有Gnu-sed:

echo -e {1..3}"\n" > input
cat input
1
 2
 3

sed -n '1p;2,$ Woutput' input 
1
cat output 
 2
 3

说明:

 sed -n '1p;2,$ Woutput' input 
  • -n默认无输出
  • 1P; print line 1
  • 2,$从第2行到$ last line
    • W(非posix)将缓冲区写入文件

从手册页gnu sed:

   w filename
          Write the current pattern space to filename.

   W filename
          Write the first line of the current pattern space to filename.  This is a GNU extension.

然而,阅读和试验需要更长的时间,而不是在一个完整的办公套件中打开文件并手动删除该行,或者调用文本到语音框架并对其进行培训,以完成工作。

如果以posix样式调用它不起作用:

sed -n --posix '1p;2,$ Woutput' input

你仍然很难将输出重命名为输入。

我没有尝试写入输入,因为这可能会损坏我精心设计的输入文件 - 请自担风险:

sed -n '1p;2,$ Winput' input 

但是,您可以设置文件系统通知作业,该作业始终将新创建的输出文件重命名为再次输入。但是我担心你不能在sed命令中做到这一点。除了...... (待续)