Pracuję nad skryptem bash, który podzieli zawartość dokumentu tekstowego w zależności od danych w wierszu.
Jeśli zawartość oryginalnego pliku była zgodna z
01 line
01 line
02 line
02 line
Jak mogę wstawić do wiersza 3 tego pliku, używając bash, aby uzyskać wynik
01 line
01 line
text to insert
02 line
02 line
Mam nadzieję, że zrobię to za pomocą heredoc lub czegoś podobnego w moim skrypcie
#!/bin/bash
vim -e -s ./file.txt <<- HEREDOC
:3 | startinsert | "text to insert\n"
:update
:quit
HEREDOC
Powyższe nie działa oczywiście, ale jakieś zalecenia, które mógłbym wdrożyć w tym skrypcie bash?
shell-script
text-processing
TheLovelySausage
źródło
źródło
Odpowiedzi:
Możesz używać Vima w trybie Ex:
3
wybierz linię 3i
wstaw tekst i nowy wierszx
napisz, jeśli dokonano zmian (mają) i wyjdźLub dopasowując ciąg:
źródło
sed
byłby tradycyjnym wyborem (GNU sed prawdopodobnie ma łatwiejszą formę niż to).Lub, będąc wyjątkowo tradycyjnym,
ed
(premia! Edycja na miejscu bez nieprzenoszalnejsed -i
formy).(To nie ma nic wspólnego
bash
.)źródło
echo text to insert
przezcat file-to-insert.txt
echo
możesz użyćprintf '%s\n' 2 a 'text to insert' . wq
Co powiesz na coś takiego:
źródło
źródło