Portál AbcLinuxu, 7. května 2025 20:03

Dotaz: Jak odstranit řádek v souboru

16.12.2021 21:25 host
Jak odstranit řádek v souboru
Přečteno: 446×
Odpovědět | Admin
Dobrý večer, jak bych mohl pomocí bash odstranit řádek X když je číslo řádku uloženo v proměnné? Předem děkuji.

Řešení dotazu:


Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

Jendа avatar 16.12.2021 21:36 Jendа | skóre: 78 | blog: Jenda | JO70FB
Rozbalit Rozbalit vše Re: Jak odstranit řádek v souboru
Odpovědět | | Sbalit | Link | Blokovat | Admin
Slepit z
tail -n +9 file    # skip prvních 8
a
head -n 7 file     # prvních 7 řádků
16.12.2021 21:46 host
Rozbalit Rozbalit vše Re: Jak odstranit řádek v souboru
Díky, jak slepit?
Jendа avatar 16.12.2021 22:13 Jendа | skóre: 78 | blog: Jenda | JO70FB
Rozbalit Rozbalit vše Re: Jak odstranit řádek v souboru
/tmp> cat file 
a
b
c
d
e
f
g
h
j
k
l
/tmp> cat file | head -n 7 file; cat file | tail -n +9 file
a
b
c
d
e
f
g
j
k
l
/tmp> 
16.12.2021 22:00 z_sk | skóre: 34 | blog: analyzy
Rozbalit Rozbalit vše Re: Jak odstranit řádek v souboru
Odpovědět | | Sbalit | Link | Blokovat | Admin
skeep=5; cat file |awk '{if (NR != '$skeep') print $0}'
debian.plus@protonmail.com
16.12.2021 22:09 host
Rozbalit Rozbalit vše Re: Jak odstranit řádek v souboru
Díky, to ae žádný řádek v souboru nesmaže.
17.12.2021 06:47 Andrej | skóre: 51 | blog: Republic of Mordor
Rozbalit Rozbalit vše Re: Jak odstranit řádek v souboru

UUOC není dobrá rada.

Jendа avatar 17.12.2021 11:05 Jendа | skóre: 78 | blog: Jenda | JO70FB
Rozbalit Rozbalit vše Re: Jak odstranit řádek v souboru
UUoC vzniká logicky z „cat soubor... sakra to je dlouhé, ještě potřebuju grep/less - šipka nahoru, |grep aaa“.

UUoC je použitelnější, protože „cat soubor|grep foo... sakra potřebuju hledat bar, ne foo - šipka nahoru, ←←←, bar“.

UUoC brání překvapivému a nečekanému chování u nástrojů pracujících inplace (gzip a bzip2 co smažou originální soubor pokud si na to člověk nevzpomene a nedá -k).

UUoC brání nahodilému přepsání při neoscapování grep "Jenda>" irc.log
16.12.2021 22:13 z_sk | skóre: 34 | blog: analyzy
Rozbalit Rozbalit vše Re: Jak odstranit řádek v souboru
Odpovědět | | Sbalit | Link | Blokovat | Admin
skeep=5; cat file |awk '{if (NR != '$skeep') print $0}' > file_; mv file_ file
debian.plus@protonmail.com
16.12.2021 22:36 host
Rozbalit Rozbalit vše Re: Jak odstranit řádek v souboru
Odpovědět | | Sbalit | Link | Blokovat | Admin
Chlapy díky ale zeptal jsem se asi z neznalosti blbě, Omlouvám se. Nevěděl jsem, že se řádky posunou. Potřebuji ten řádek odstranit ale aby tam zůstal prázdný řádek, nevím jak to napsat. Zkusím příklad.
původní soubor

1
2
3
4
5

chci odstranit řádek 3

upravený soubor

1
2

4
5
16.12.2021 22:41 z_sk | skóre: 34 | blog: analyzy
Rozbalit Rozbalit vše Re: Jak odstranit řádek v souboru
skeep=5; cat file |awk '{if (NR == '$skeep') print ""; else print $0}' > file_; mv file_ file
debian.plus@protonmail.com
Jendа avatar 16.12.2021 22:49 Jendа | skóre: 78 | blog: Jenda | JO70FB
Rozbalit Rozbalit vše Re: Jak odstranit řádek v souboru
/tmp> cat file | head -n 7 file; echo; cat file | tail -n +9 file
a
b
c
d
e
f
g

j
k
l
nechci rejpat, ale echo bys zvládnout mohl… Možná by stálo za to učit se základy shellu nějak systematicky.
16.12.2021 22:59 jejda | skóre: 25 | blog: jejda
Rozbalit Rozbalit vše Re: Jak odstranit řádek v souboru
Odpovědět | | Sbalit | Link | Blokovat | Admin
Bych ty jednotlivé řádky první očísloval programem nl, potom grepnul všecko co nezačíná číslem z proměnné a nakonec to pomocné číslování odřezal cutem. Řekněme že chcu smazat řádek 30 tak:
n=30; nl -n ln soubor.txt | grep -v "^$n\b" | cut -f2-
Řešení 2× (Semo, billgates)
17.12.2021 00:29 tttttttttttttt
Rozbalit Rozbalit vše Re: Jak odstranit řádek v souboru
Odpovědět | | Sbalit | Link | Blokovat | Admin
Nahrazení řádku za prázdný:
export X=3
sed -i "${X}s/.*//" file.txt
Smazání třetího řádku
sed -i "3d" file.txt
17.12.2021 11:19 Semo | skóre: 45 | blog: Semo
Rozbalit Rozbalit vše Re: Jak odstranit řádek v souboru
ten export je zbytocny
If you hold a Unix shell up to your ear, you can you hear the C.
18.12.2021 23:00 host
Rozbalit Rozbalit vše Re: Jak odstranit řádek v souboru
Nahrazení řádku za prázdný:
sed -i "${X}s/.*//" file.txt
Tak jsem to vyzkoušel ale dostávám chybu:
sed: 1: "file.txt": command a expects \ followed by text
19.12.2021 00:40 billgates | skóre: 27
Rozbalit Rozbalit vše Re: Jak odstranit řádek v souboru
Normalne to funguje:
[bill@win10pro ~]$ X=3; sed -i "${X}s/.*//" file.txt
[bill@win10pro ~]$ cat file.txt
a
b

d
e
f
g
h
19.12.2021 01:41 Krysa Vasilisa
Rozbalit Rozbalit vše Re: Jak odstranit řádek v souboru
Odpovědět | | Sbalit | Link | Blokovat | Admin
Smazani radku:

echo -e "${linenumber}d\nw\nq"|ed "$filename"

Nahrazeni radku prazdnym:

i=0; cat "$file" | while read line; do (( i+=1 )); if (( i==linenumber )); then echo; else echo "$line"; fi; done

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.