2010-05-19 10 views

Odpowiedz

126

Jeśli Twój sed pozwala na edycję miejsce poprzez parametr -i:

sed -e 's/$/string after each line/' -i filename 

Jeśli nie, trzeba zrobić tymczasowy plik:

typeset TMP_FILE=$(mktemp) 

touch "${TMP_FILE}" 
cp -p filename "${TMP_FILE}" 
sed -e 's/$/string after each line/' "${TMP_FILE}" > filename 
+0

Dzięki, to działa! –

+0

Dlaczego "dotykasz" pliku tymczasowego? I sprawiłbym, że polecenie "sed" jest uwarunkowane sukcesem 'cp' lub oryginał może zostać utracony. –

+0

Dotknąłem pliku, aby szybko zarezerwować tymczasową nazwę. To może nie być potrzebne. Myślę, że masz rację, uzależniając polecenie sed od sukcesu cp. Dlaczego nie edytować kodu, aby to naprawić. Nie będę miał nic przeciwko! Pozdrawiam, Tom –

-7

Sed jest trochę brzydki, można zrobić to elegancko lubi:

[email protected] tmp$ cat foo 
bar 
candy 
car 
[email protected] tmp$ for i in `cat foo`; do echo ${i}bar; done 
barbar 
candybar 
carbar 
+2

zawodzi w przypadku plików zawierających więcej linie niż maksymalny limit argumentów powłoki. Spróbuj: cat foo | podczas czytania a; do echo $ {a} bar; zrobione lub coś podobnego zamiast tego; w większości przypadków jest to odpowiedni zamiennik. – alex

+0

Nie powiedzie się również dla linii z spacji w nich. –

+1

Er, nie, nie zawodzi Dennis. maksymalny limit argumentów powłoki? Crikey jesteś pendantyczny. – hendry

7

Jeśli go masz, lam (laminat) narzędzie może to zrobić, na przykład:

$ lam filename -s "string after each line" 
2

Wolę używając awk. Jeśli jest tylko jedna kolumna, użyj $0, w przeciwnym razie zastąp ją ostatnią kolumną.

Jednym ze sposobów,

awk '{print $0, "string to append after each line"}' file > new_file 

czy to

awk '$0=$0"string to append after each line"' file > new_file 
+0

Ponadto, aby dołączyć numery linii (jak było w moim przypadku), można użyć zmiennej 'NR':' awk '{print $ 0, NR}' ' – andrybak

Powiązane problemy