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

Bash 如何使用单个命令从文件中提取(读取和删除)一行?,bash,sed,Bash,Sed,我想用一个命令从文件中提取第一行,读入一个变量,然后立即删除。我知道sed可以阅读以下第一行: sed '1q' file.txt sed '1q;d' file.txt 或按如下方式删除: sed '1q' file.txt sed '1q;d' file.txt 但我能用一个命令同时完成这两个任务吗? 原因是多个进程将读取文件的第一行,我希望尽量减少它们获取同一行的机会。这是不可能的。 除非您阅读了手册页并使用了Gnu: echo -e {1..3}"\n" &g

我想用一个命令从文件中提取第一行,读入一个变量,然后立即删除。我知道
sed
可以阅读以下第一行:

sed '1q' file.txt
sed '1q;d' file.txt
或按如下方式删除:

sed '1q' file.txt
sed '1q;d' file.txt
但我能用一个命令同时完成这两个任务吗? 原因是多个进程将读取文件的第一行,我希望尽量减少它们获取同一行的机会。

这是不可能的。 除非您阅读了手册页并使用了Gnu:

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;打印行1
  • 2美元,从第2行到最后一行
    • 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命令范围内做到这一点。除了(待续)

欢迎来到堆栈溢出!请更新您的问题,以显示您已在中尝试了什么,并添加示例输入和预期输出。有关更多信息,请参阅,并使用:)获取并发性,您需要更好的机制来实现这一点!!你还想让我展示什么?我试着使用这两个命令,但我想要的是一次访问文件的结果。我展示的两个命令的预期输出是显而易见的。