ex -s /myPathToTheFile.txt <<\EX
1p
1d
wq
EX
ou
ex -s /myPathToTheFile.txt <<< 1p$'\n'1d$'\n'wq
ou menos digitação:
ed -s /myPathToTheFile.txt <<< $'1\nd\nwq'
Como posso obter a primeira linha de um arquivo de texto de entrada, enquanto excluo essa linha do arquivo de texto?
Se eu tivesse um arquivo de texto /myPathToTheFile.txt
como este
► put returns between paragraphs
► for linebreak add 2 spaces at end
► _italic_ or **bold**
Gostaria de obter esta linha como saída
► put returns between paragraphs
e meu arquivo de texto deve estar agora assim
► for linebreak add 2 spaces at end
► _italic_ or **bold*
Pelo menos com o 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**
Com o GNU sed ele pode ser escrito como um verso
sed -i -e '1 {w /dev/stdout' -e 'd}' file
Supondo que você esteja solicitando um script de shell, isso fará o que você solicitou:
NAME=$1
head -n 1 $NAME
sed -i '1d' $NAME
sed -ne '1p' -e '1!s/^//w temp_file' yourfile && mv temp_file yourfile
Você pode usar head
, tail
e mv
:
Exibe a primeira linha:
head -1 myPathToTheFile.txt
Mantendo as últimas linhas ( +2
):
tail -n +2 myPathToTheFile.txt > file.tmp && mv file.tmp myPathToTheFile.txt
Usando descritores de arquivos e um pouco de python
{
{
head -n1 >&3;
3>&- tail -n +1;
3>&- python -c 'import sys; sys.stdout.truncate(sys.stdout.tell())';
}<file 1<>file
} 3>&1
Usando a cabeça e a cauda. O arquivo é target.txt
head -1 target.txt && tail -n+2 target.txt > tmp
mv tmp target.txt && rm tmp
Nota: Assegure-se de que não exista nenhum arquivo tmp existente na pasta atual, senão ele será removido.
Explicação:
Tags text-processing