Zastępowanie ciągu na podstawie numeru wiersza


50

Mam sytuację, w której chcę zastąpić określony ciąg w wielu plikach

Zamień ciąg AAA na inny ciąg BBB, ale istnieje wiele ciągów zaczynających się od AAA lub kończących się na AAA, i chcę zastąpić tylko jeden w wierszu 34 i utrzymać pozostałe nietknięte.

Czy można określić według numeru wiersza, we wszystkich plikach ciąg ten znajduje się dokładnie w 34 wierszu.

Odpowiedzi:


82

Możesz podać numer linii w sed lub NR (liczba rekordów) w awk.

awk 'NR==34 { sub("AAA", "BBB") }'

lub użyj FNR (rekord numeru pliku), jeśli chcesz podać więcej niż jeden plik w wierszu poleceń.

awk 'FNR==34 { sub("AAA", "BBB") }'

lub

sed '34s/AAA/BBB/'

zrobić wymianę na miejscu z sed

sed -i '34s/AAA/BBB/' file_name

-3

załóżmy, że chcesz zastąpić trzeci wiersz w pliku_pliku:

sed -i "s/`head -3 file_record | tail -1 `/replaced/" file_record

użyj wstecznego cytatu przed głową i po -1 ... tutaj to nie bierze
RAMAN

1
To po prostu nie zadziała. Potrzebuje ciężkiej ucieczki. A jeśli trzecia linia zostanie zduplikowana w innym miejscu?
Sparhawk,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.