Rozglądałem się za sed
poleceniem, aby dodać tekst do pliku w określonym wierszu. Działa to dodając tekst po wierszu 1:
sed '1 a\
Ale chcę go dodać przed wierszem 1. Byłoby to:
sed '0 a\
ale pojawia się ten błąd: invalid usage of line address 0
.
Jakieś sugestie?
text-processing
command-line
sed
Manolo
źródło
źródło
Odpowiedzi:
Użyj opcji
sed
insert (i
), która wstawi tekst w poprzednim wierszu.Aktualizacja autora pytania:
Aby edytować plik na miejscu - w GNU
sed
- musiałem dodać-i
opcję:Również składnia
Dla nie-GNU sed
Musisz nacisnąć klawisz powrotu natychmiast po ukośniku
1i\
i pofirst_line_text
:Zauważ też, że niektóre
sed
implementacje inne niż GNU (na przykład ta w systemie macOS) wymagają argumentu dla-i
flagi (użyj,-i ''
aby uzyskać taki sam efekt jak w GNUsed
).źródło
-i
opcji. Zaktualizuję twoją odpowiedź przed zaakceptowaniem.sed '1 i\this text is entered above the existing first line' file
pracuje dla mnie.sed (GNU sed) 4.2.2
po prostused '1 i text to insert' -i file
działało jak urok. Dziękiawk
poniżej. To powinno działać.Echo służy do uzyskania tekstu. Cat nazwa pliku - drukuje plik w konsoli i> używa go do wysłania do innego pliku nazwa_pliku1, a następnie przenosimy nazwę pliku1 do nazwy pliku, aby wstawić tekst do pierwszego wiersza żądanego pliku.
źródło
Możesz używać Vima w trybie Ex:
1
wybierz pierwszą linięi
wstaw tekst i nowy wierszx
Zapisz i zamknijźródło
Chcesz wstawić tekst przed pierwszym wierszem, a nie dołączyć go później, więc użyj
Dokument tutaj może również pomóc:
źródło
Za pomocą GNU awk> = 4.1:
W przeciwieństwie do wszystkich
sed
odpowiedzi, działa to również na puste pliki.źródło
inplace
jest biblioteką i niestety pojawia się we wszystkich dystrybucjach awk. Dostaję komunikat „awk: fatal: nie można otworzyć pliku źródłowego„ w miejscu ”do czytania”GNU Awk 4.2.1, API: 2.0 (GNU MPFR 4.0.1, GNU MP 6.1.2)
Jeśli nie określisz tej
-i
opcji, nie wyświetli żadnego błędu i wyświetli dane wyjściowe na standardowym terminalu, ale nie wstawi tekstu do pliku.źródło
-i
zmiany.gnu sed
specyficzne i tak się składa, żegnu sed
akceptuje toi
bez odwrotnego ukośnika). Jeśli inni myślą, że to uzasadnia osobną odpowiedź + głosowanie ... no cóż.0a
Komenda próbowano ma pracowaćex
, poprzednikvi
:Samo
printf
polecenie wydaje:Te
0a
środki dołączania po 0th linii (czyli przed pierwszym wierszu).Następny wiersz lub wiele wierszy to dosłowny tekst do dodania.
Sam
.
w linii kończy polecenie „append”.Te
x
przyczyny Ex, aby zapisać zmiany w pliku i wyjściu.źródło
Dziwi mnie, że w tym starym pytaniu nikt nie pokazał najczęstszego (i w tym przypadku dość prostego) polecenia sed:
Który działa w większości powłok i jest przenośny do kilku wersji sed.
Jeśli GNU sed jest dostępny, możesz użyć tego:
Różnica polega na tym, że GNU sed pozwala na użycie
\n
znaku nowej linii, a inne potrzebują literalnej nowej linii poprzedzonej odwrotnym ukośnikiem (który również działa w GNU sed).Jeśli
$'…'
używana jest powłoka akceptująca składnię, możesz wstawić nową linię bezpośrednio, więc sed widzi, że nowa linia już tam jest:Który działa dla większej liczby wersji sed.
źródło
Niestety, wszystkie powyższe odpowiedzi (głównie z
sed
) nie zadziałały dla mnie, ponieważ wszystkie zastąpiły pierwszą linię. Jestem naUbuntu 16.04 LTS
maszynie. Oto moje obejścieGNU Awk 4.0.2
:źródło
sed
odpowiedź, która korzysta z zamiany, ale nie zastępuje istniejącej linii.Pierwszy i ostatni
Zakładam, że każdy, kto szukał sposobu wstawiania / dołączania tekstu na początku / końcu pliku, prawdopodobnie również musi wiedzieć, jak to zrobić.
Wyjaśnienie
Dane
cal
wyjściowe są przesyłane do gnu-sed
(wywoływanegsed
na macOS zainstalowanym przez brew.sh ) z rozszerzoną RegEx (-E
) i zastosowanymi 6 „skryptami” (-e
), a\
dla zachowania czytelności łamane są wiersze linii . Skrypty 1 i 2 używają1i\
do „w wierszu 1 wstaw”. Skrypty 5 i 6 używają$a\
do „w wierszu <last>, append”. Wyrównałem w pionie wyniki tekstowe, aby kod reprezentował oczekiwany wynik. Skrypty 3 i 4 wykonują podstawienia (te ostatnie dotyczą tylko „linii <last>”). Rezultatem jest konwersja danych wyjściowych komendy na poprawny JSON.wynik
źródło
1i
do wstawiania tekstu przed pierwszym wierszem. Ktoś z tym pytaniem musiałby wydobyć z odpowiedzi części, których potrzebują, aby rozwiązać problem. Pytania są bezpłatne, dlatego zapraszam do zadawania własnych pytań i udzielania odpowiedzi w celu udzielenia konkretnej odpowiedzi.