テキストファイルからその行を削除しながら、入力テキストファイルの最初の行を取得する方法


11

テキストファイルからその行を削除しながら、入力テキストファイルの最初の行を取得するにはどうすればよいですか?

/myPathToTheFile.txtこのようなテキストファイルがある場合

► put returns between paragraphs
► for linebreak add 2 spaces at end
► _italic_ or **bold**

この行を出力として取得したい

► put returns between paragraphs

そして私のテキストファイルはこのようになるはずです

► for linebreak add 2 spaces at end
► _italic_ or **bold*

この操作のコストはファイルサイズに比例することに注意してください。そのため、ファイルが大きく、これを頻繁に行うと、非常に遅くなります。
CodesInChaos 2017

回答:


13
ex -s /myPathToTheFile.txt <<\EX
1p
1d
wq
EX

または

ex -s /myPathToTheFile.txt <<< 1p$'\n'1d$'\n'wq

または、入力を減らす:

ed -s /myPathToTheFile.txt <<< $'1\nd\nwq'

うわー、エドのいい使い方...!
qwr

10

少なくともGNU sedでは:

$ cat file
► put returns between paragraphs
► for linebreak add 2 spaces at end
► _italic_ or **bold**

$ sed -i '1{
w /dev/stdout
d}' file
► put returns between paragraphs

$ cat file
► for linebreak add 2 spaces at end
► _italic_ or **bold**

GNU sedを使用すると、ワンライナーとして記述できます。

sed -i -e '1 {w /dev/stdout' -e 'd}' file

6

あなたがシェルスクリプトを要求していると仮定すると、これはあなたが要求したことをします:

NAME=$1
head -n 1 $NAME
sed -i '1d' $NAME


2

あなたは使用することができheadtailそしてmv

最初の行を表示します。

head -1 myPathToTheFile.txt

最後の(+2)行を保持:

tail -n +2 myPathToTheFile.txt > file.tmp && mv file.tmp myPathToTheFile.txt

1

ファイル記述子と少しの使用 python

{
    { 
    head -n1 >&3; 
    3>&- tail -n +1;
    3>&- python -c 'import sys; sys.stdout.truncate(sys.stdout.tell())';
    }<file 1<>file
} 3>&1

1

頭と尾を使用します。ファイルはtarget.txtです

head -1 target.txt && tail -n+2 target.txt > tmp
mv tmp target.txt && rm tmp

注:現在のフォルダーに既存のファイルtmpがないことを確認してください。それ以外の場合は削除されます。

説明:

  • "head -1"は最初の行を選択します
  • "tail -n + 2 target.txt> tmp"は2番目以降のすべての行を選択し(含む)、それらをtmpに入れます
  • mvは元のファイルをtmpで上書きします
  • rm tmpは、このように作成されたtmpファイルを削除します
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.