Do tej pory udało mi się znaleźć sposób dodania wiersza na początku pliku, ale nie jest to dokładnie to, czego chcę. Pokażę to na przykładzie
Zawartość pliku
some text at the beginning
Wynik
<added text> some text at the beginning
Jest podobnie, ale nie chcę tworzyć z nim żadnej nowej linii ...
Chciałbym to zrobić, sed
jeśli to możliwe.
sed
.Odpowiedzi:
sed
może działać pod adresem:Co to za magia,
1s
którą widzisz przy każdej odpowiedzi tutaj? Adresowanie linii! .Chcesz dodać
<added text>
pierwsze 10 linii?Lub możesz użyć
Command Grouping
:źródło
Jeśli chcesz dodać linię na początku pliku, musisz dodać
\n
na końcu ciągu w najlepszym rozwiązaniu powyżej.Najlepszym rozwiązaniem będzie dodanie łańcucha, ale w przypadku łańcucha nie doda on linii na końcu pliku.
źródło
Jeśli plik ma tylko jedną linię, możesz użyć:
Jeśli to więcej niż jedna linia. jeden z:
Dołączyłem ten drugi, abyś wiedział, jak robić zakresy linii. Oba te „zamieniają” znacznik linii początkowej na dotkniętych liniach tekstem, który chcesz wstawić. Możesz także (zakładając, że jesteś
sed
wystarczająco nowoczesny) korzystać z:zrobić edycję w miejscu.
źródło
Możesz użyć
cat -
źródło
echo
dodaniu nowego wiersza?> file
do polecenia, które spamowało mój terminal"some text at the beginning"
printf '%s' "some text" | cat - filename > tmpfile && mv tmpfile filename
Aby wstawić tylko nowy wiersz:
źródło
Użyj podpowłoki:
źródło
Pamiętaj, że w systemie OS X
sed -i <pattern> file
nie powiedzie się. Jeśli jednak podasz rozszerzenie kopii zapasowejsed -i old <pattern> file
,file
zostanie ono zmodyfikowane w trakciefile.old
tworzenia. Następnie możesz usunąćfile.old
w swoim skrypcie.źródło
PROBLEM: oznacz plik na górze pliku podstawową nazwą katalogu nadrzędnego.
Tj. Dla
oznacz na górze za
file1
pomocąProgramming
.ROZWIĄZANIE 1 - niepuste pliki:
1s
umieszcza tekst w pierwszym wierszu pliku.ROZWIĄZANIE 2 - puste lub niepuste pliki:
Powyższe
sed
polecenie kończy się niepowodzeniem w przypadku pustych plików. Oto rozwiązanie oparte na /superuser/246837/how-do-i-add-text-to-the-beginning-of-a-file-in-bash/246841#246841Zauważ, że
-
wymagane jest polecenie in cat (odczytuje standardowe dane wejściowe:man cat
więcej informacji można znaleźć). Tutaj uważam, że należy pobrać dane wyjściowe instrukcji printf (do STDIN), a następnie cat i plik do temp ... Zobacz także wyjaśnienie na dole http://www.linfo.org/cat .html .Dodałem również
-f
domv
polecenia, aby uniknąć prośby o potwierdzenie podczas zastępowania plików.Aby ponownie przejrzeć katalog:
Zauważ też, że spowoduje to przerwanie ścieżek ze spacjami; istnieją rozwiązania gdzie indziej (np. globbing plików lub
find . -type f ...
rozwiązania typu) dla nich.DODATEK: Re: mój ostatni komentarz, ten skrypt pozwoli ci powracać do katalogów ze spacjami w ścieżkach:
źródło
Cześć ze zwrotem karetki:
źródło
Aby dodać linię na początku pliku:
źródło
Jest bardzo prosty sposób:
źródło
Dla zabawy, oto rozwiązanie, w
ed
którym nie ma problemu z działaniem na pustym pliku. Możesz umieścić go w skrypcie powłoki, tak jak każdą inną odpowiedź na to pytanie.Powyższy skrypt dodaje tekst do wstawienia do pierwszego wiersza, a następnie łączy pierwszy i drugi wiersz. Aby uniknąć wychodzenia z edycji po błędzie z nieprawidłowym złączeniem, najpierw tworzy pusty wiersz na końcu pliku i usuwa go później, jeśli nadal istnieje.
Ograniczenia: Ten skrypt nie działa, jeśli
<added text>
jest dokładnie równy jednemu okresowi.źródło
moje dwa centy:
To zadziała, nawet jeśli łańcuch zawiera ukośnik do przodu
"/"
źródło
Pierwszy
tac
przesuwa plik do tyłu (ostatni wiersz jako pierwszy), więc „tekst do wstawienia” pojawia się na końcu. Drugitac
zawija go ponownie, tak aby wstawiona linia była na początku, a oryginalny plik w oryginalnej kolejności.źródło
Kolejne rozwiązanie z aliasami. Dodaj do pliku init rc / env:
Stosowanie:
źródło